[LeetCode]k个一组翻转链表(Reverse Nodes in k-Group)
题目描述
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。
示例 :
给定这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
说明 :
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
ListNode结构
class ListNode {int val;ListNode next;ListNode(int x) {val = x;}
}
解决方法
使用4个指针反转链表
start
下一次循环的开始节点kStep
提前走k步cur
当前要移动的节点pre
固定的开始节点
例如:
list = 1 -> 2 -> 3 -> 4 -> 5, k = 3
首先使用虚拟头节点简化操作
dummy -> 1 -> 2 -> 3 -> 4 -> 5第一次反转链表过程如下
dummy -> 1 -> 2 -> 3 -> 4 -> 5pre cur kStepstartdummy -> 2 -> 3 -> 1 -> 4 -> 5pre cur kStep startdummy -> 3 -> 2 -> 1 -> 4 -> 5pre cur startkStep第二次反转遍历过程如下
dummy -> 3 -> 2 -> 1 -> 4 -> 5 -> nullpre start kStepkStep为null退出循环
public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy = new ListNode(0);dummy.next = head;ListNode start = dummy;while (true) {ListNode kStep = start, pre = start, cur;start = pre.next;for (int i = 0; i < k && kStep != null; i++)kStep = kStep.next;if (kStep == null)break;for (int i = 0; i < k - 1; i++) {cur = pre.next;pre.next = cur.next;cur.next = kStep.next;kStep.next = cur;}}return dummy.next;}
[LeetCode]k个一组翻转链表(Reverse Nodes in k-Group)相关推荐
- 【Java】【leetcode第25题】K 个一组翻转链表
文章仅供自己学习记录所用,若有侵权.联系我删除! 接着来个链表题(听说字节考了) [K 个一组翻转链表] 其实这道题是206题和24题结合的一个进阶版本,我觉得关键就是控制范围(反正我自己折磨了很久, ...
- K 个一组翻转链表(递归,Kotlin)
25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...
- 20200329:K 个一组翻转链表(leetcode25)
K 个一组翻转链表 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 注意题目里的常数的额外空间的要求,意味着不可以使用栈之类的数据结构. 这道链表题实际就是上一道的进阶版,指定每k个进行翻转 ...
- LeetCode--第25题K个一组翻转链表
LeetCode–第25题K个一组翻转链表 题目描述 解决方案–C语言 主体是用递归的办法.递归三要素: 1.向上返回什么:一个处理好的子链表 2.返回条件是什么:要么是处于好了子链表,要么是因长度小 ...
- 清晰易懂的“K个一组翻转链表”解法
题目来源:Leetcode K个一组翻转链表 一.题目 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍 ...
- 链表经典题:K个一组翻转链表
题目: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定这 ...
- LeetCode 25K 个一组翻转链表26删除排序数组中的重复项
如果问题或者其他方法还请分享,如加入打卡微信搜索bigsai回复进群一起打卡. K个一组翻转链表 题目要求 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小 ...
- 25. K 个一组翻转链表
25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...
- 哔哩哔哩2020校园招聘 - K个一组翻转链表 一年中的第几天
1.K个一组翻转链表 题目描述: 给你一个链表,每 k 个节点一组进行翻转,请返回翻转后的链表. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例 : 给定这个链表:1-&g ...
- 由力扣K 个一组翻转链表到360原创题
前段时间帮对象做360笔试题时,遇到一个没怎么想明白的编程题,直到今天刷力扣遇到了相似的k个一组翻转链表后,想着在做一下那天的编程题,就想着记录一下遇到的难点. 力扣题如下图所示: 360原创题如下: ...
最新文章
- 十年“老司机”的私家锦囊:10个编程技巧、5个纠错步骤,让你的编程之路少点坎坷
- Protocol Buffer序列化协议及应用
- 怎么去除桌面图标显示快捷方式字样?
- jmeter学习笔记4 数据库插入
- Arcgis for Javascript实现两个地图的联动
- Java调用js方法
- repeater导出excel html,Repeater显示数据,并且导出到excel
- java文件日志功能_JAVA文件下载功能问题解决日志
- 后期处理之一:雾蒙蒙风景照片处理技巧
- vscode eslint 格式化完之后,一个标签多行,看的头疼
- 基于斗鱼的娱乐直播视频平台--Vue移动端页面
- 项目经理面试的一些问题讨论
- 教程:深入理解Flash的沙箱 – Application Domains
- 网络安全 — 零信任网络访问(ZTNA)
- 2021年全球手机市场,三星和华为都输了,其他手机企业赢了
- 郑州计算机c语言培训机构,c语言入门学习选郑州哪家计算机专业学校
- 18-Ansible常用模块-group模块
- 量化投资可转债策略--源代码
- TAPA认证辅导,TAPA全球委员会正式发布了《运输供应商最低安全要求》
- 八、jQuery的QQ音乐播放器