K个一组翻转链表(LeetCode)

news2024/9/21 12:30:38

题目

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

解题

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


def reverseKGroup(head, k):
    """
    翻转链表中每 k 个节点一组的节点。

    :param head: 链表的头节点
    :param k: 每组翻转的节点数量
    :return: 翻转后的链表头节点
    """

    def getKthNode(current, k):
        """
        获取链表中第 k 个节点。

        :param current: 当前节点
        :param k: 节点数量
        :return: 第 k 个节点或 None(如果不足 k 个节点)
        """
        while current and k > 1:
            current = current.next
            k -= 1
        return current

    def reverseLinkedList(head, k):
        """
        翻转链表的一部分。

        :param head: 部分链表的头节点
        :param k: 节点数量
        :return: 翻转后的链表头节点
        """
        previous, current = None, head
        while k:
            next_node = current.next
            current.next = previous
            previous = current
            current = next_node
            k -= 1
        return previous

    # 找到第 k 个节点
    kth_node = getKthNode(head, k)
    if not kth_node:
        return head

    next_group_head = kth_node.next
    kth_node.next = None

    # 翻转当前 k 个节点
    new_head = reverseLinkedList(head, k)

    # 递归处理剩余链表,并连接
    head.next = reverseKGroup(next_group_head, k)

    return new_head


def listToListNode(arr):
    """
    将 Python 列表转换为链表。

    :param arr: Python 列表
    :return: 链表的头节点
    """
    dummy = ListNode()
    current = dummy
    for val in arr:
        current.next = ListNode(val)
        current = current.next
    return dummy.next


def listNodeToList(head):
    """
    将链表转换为 Python 列表。

    :param head: 链表的头节点
    :return: Python 列表
    """
    result = []
    while head:
        result.append(head.val)
        head = head.next
    return result


def testReverseKGroup():
    """
    测试 reverseKGroup 函数。
    """
    test_cases = [
        ([1, 2, 3, 4, 5], 2),
        ([1, 2, 3, 4, 5], 3),
        ([1, 2, 3, 4, 5], 1),
        ([1], 1),
        ([1, 2], 2)
    ]

    for i, (input_list, k) in enumerate(test_cases):
        head = listToListNode(input_list)
        new_head = reverseKGroup(head, k)
        output_list = listNodeToList(new_head)
        print(output_list)


# 运行测试代码
testReverseKGroup()

 [2, 1, 4, 3, 5]
[3, 2, 1, 4, 5]
[1, 2, 3, 4, 5]
[1]
[2, 1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java单元覆盖率工具JaCoCo使用指南

JaCoCo(Java Code Coverage Library)是一款开源的Java代码覆盖率工具,它提供了详细的代码覆盖信息,帮助开发人员了解测试用例对代码的覆盖情况,从而发现潜在的问题和改进空间。以下是关于JaCoCo的详细介绍:…

[算法]二叉搜索树(BST)

二叉搜索树(Binary Search Tree),也称二叉排序树或二叉查找树。 一、二叉搜索树的性质 二叉搜索树是一棵二叉树,可以为空。 当二叉搜索树不为空时: 1、非空左子树的所有键值小于其根结点的键值。 2、非空右子树的所有…

linux开发板配置-双网卡桥接-问题记录

韦东山i.mx6ull开发板 使用usb网卡连接电脑,ubuntu进行双网卡配置 问题: mount: mounting 192.168.96.131:/home/book/nfs_rootfs on /mnt failed: No route to host 乱七八糟各种配置,能ping通,但是nfs挂载不上 解决&#xff1a…

推荐系统与搜索系统架构

一、推荐系统逻辑 推荐的本质就是为了解决信息过载造成的“选择困难症”,便于用户能够在自己选物之前,系统已经帮用户筛选到了最想要的信息。 以下是我按照用户打开APP进入推荐页面时,推荐系统返回给该用户推荐列表的整体流程: …

Xshell安装图文

1.下载 通过百度网盘分享的文件:Xshell安装图文 链接:https://pan.baidu.com/s/1k4ShbhUVQmdxpM9H8UYOSQ 提取码:kdxz --来自百度网盘超级会员V3的分享 2.安装 3.连接与使用 见下载

vector 简单模拟实现

目录 一. vector成员变量 二. vector的构造函数和析构函数 三. vector的成员函数 1. 容量操作函数 扩容操作 (1). finish更新问题 (2). 扩容深浅拷贝问题 resize与尾插、尾删与判空 insert与erase与clear 2. 函数重载 (1). 赋值运算符重载 (2). [ ]重载进行访问 四. …

phpstudy搭建sqlilabs本地靶场

请先在网上解决好前置条件的下载和安装:phpstudy、vscode、navicat premium(非必要)、sqlilab的压缩包/文件夹 phpstudy--安装sqlilabs 1.打开phpstudy后,我们会用到MySQL5.7.26和Nginx1.15.11 #mysql5.7.26是因为sqlilabs靶场不支持高版本MySQL 2.在软…

练习实践 web中间件httpd-id:2-编译安装-web登录认证设置

参考来源: 用编译的方式安装apache httpd服务 编译安装过程记录 1.下载准备环境: yum -y install gcc gcc-c make pcre pcre-devel gd-devel openssl-devel zlib zlib-devel apr-*根据之前的操作文档和实际安装经验,提前将所需依赖项安装…

sqli-labs注入练习1,2关

sqli-labs第一关 判断是否存在sql注入 可见,根据输入数字的不同,结果也不同 判断sql语句是否是拼接,且是字符型还是数字型 由上可见,这关指定是字符型且存在sql注入漏洞 使用联合注入 第一步:首先知道表格有几列&…

PyCharm 2024.1 最新变化

文章目录 PyCharm 2024.1 最新变化一、新的 AI Assistant 功能 PyCharm Professional1、一键创建包含生成代码的文件2、生成架构感知型 SQL 查询 二、缩小整个 IDE 的选项三、新终端 Beta PyCharm 2024.1 最新变化 pycharm是什么 作为 JetBrains 旗下的一款专为 Python 开发者设…

SQL注入之sqli-labs靶场第二关

手工注入less-2 1.找注入点 通过 ?idsdfsdf 报错发现注入点 经过尝试没有闭合发现是数字型注入 2.猜解字段数量 发现字段数量为3 3.通过union联合查询判断回显点 发现回显点2,3, 4,进行信息收集 数据库版本号:5.7.26 数据库…

【MongoDB】1.MongoDB下载与安装

目录 一、下载 二、安装 三、安装MongoDB Compass 四、连接 一、下载 官网地址: https://www.mongodb.com/download-center/community 二、安装 详细的安装教程可参考: MongoDB安装(超详细)_安装mongodb-CSDN博客 注意事项1&…

亚马逊爬虫(Amazonbot)IP地址,真实采集数据

一、数据来源: 1、这批亚马逊爬虫(Amazonbot)IP来源于尚贤达猎头公司网站采集数据; ​ 2、数据采集时间段:2023年10月-2024年7月; 3、判断标准:主要根据用户代理是否包含“Amazonbot”和IP核…

C# Unity 面向对象补全计划 七大原则 之 依赖倒置原则 (DIP)难度:☆☆ 总结:多抽象,多接口,少耦合

本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识,看不懂没关系 请看专栏:http://t.csdnimg.cn/mIitr,查漏补缺 1.依赖倒置原则 (DIP) 这…

【算法题】无重复字符的最长子串(滑动窗口)

目录 一、题目描述 二、解题思路 1、什么是滑动窗口算法? 2、滑动窗口一般解题模板 三、参考答案 一、题目描述 无重复字符的最长子串 给定一个字符串s ,请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s "abcabcbb"…

【Linux】vim(工具篇)

文章目录 什么是vimvim的使用普通模式(Normal Mode) 命令模式(Command Mode)批量化注释/批量化去注释 vim的配置 什么是vim Vim 是一种高度可配置的文本编辑器,最初由 Bram Moolenaar 在 1991 年基于 vi 编辑器创建。V…

力扣——238.移动零

题目 思路 利用双指针,先找到第一个为0的地方指向,指针2指向下一个,指针1之前是已经处理好的数据,指针2进行遍历,遇到非零则与指针1数据交换,然后指针1。 代码 class Solution { public:void moveZeroes(…

OpenAI not returning a result?

题意:OpenAI 没有返回结果吗? 问题背景: Im trying to use the OpenAI beta but I cant seem to get a result. Im accessing the API via an NPM package (openai-api - npm). I have that setup and working but when I make a request th…

Unity强化工程 之 Mask SortingGroup

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1.Mask 遮罩故名思意就是起到遮挡作用的罩子:精灵遮罩 - Unity 手册 如果我想让sprite与遮罩发生交互,那么我…

深入理解接口测试:实用指南与最佳实践(三)API文档解析及编写测试用例

​ ​ 您好,我是程序员小羊! 前言 这一阶段是接口测试的学习,我们接下来的讲解都是使用Postman这款工具,当然呢Postman是现在一款非常流行的接口调试工具,它使用简单,而且功能也很强大。不仅测试人员会使用…