| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode 25 K 个一组翻转链表reverseKGroup(Java&Python代码) -> 正文阅读 |
|
[数据结构与算法]LeetCode 25 K 个一组翻转链表reverseKGroup(Java&Python代码) |
给你链表的头节点 head ,每?k?个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是?k?的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 示例 1:
?示例 2:
?解题思路: 本题是LeetCode 第24题两两交换链表中的节点swapPairs_萝萝荦荦的博客-CSDN博客的进阶版本 将整个链表分割成若干个长度为k的子链表来出来 参数设置: curHead 当前正在处理的子链表的头节点 curTail 当前正常处理的子链表的尾部节点 thisHead 最终需要返回的链表的头节点 lastTail 上一个处理的链表的尾部节点 下图为各个指针的初始位置? 首先找到当前需要处理的子链表的尾节点,此节点通过重当前节点往下数k-1个节点获得。 如果在遍历过程中,走到了空节点,说明链表已经处理完,直接把当前的头节点返回即可。 下图为处理第一段子链表时候,找到子链表的尾节点过程: ?到当前步骤为止,我们已经控制了子链表的头和尾,我们现在要做的事处理子链表中间的情况。 设置一些中间指针: nextHead 下一个子链表的头节点 n1 设置为当前处理段的头部 n2 为n1的下一个位置 n3 为n2的下一个位置 ? ? ? ? ? ?如果thisHead == head 说明我们从来没更改过这个值,我们将其设置为curTail 如果lastTail有值,说明这不是第一段子链表,将上一段的尾巴连接到这一段的头 ? 到此为止,一段子链表已经处理好了,我们开始循环往复处理下一段? Java代码:
?Python代码
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:39:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |