题目描述

给出一个链表,每 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;}

本文首发: https://lierabbit.cn/2018/09/...

[LeetCode]k个一组翻转链表(Reverse Nodes in k-Group)相关推荐

  1. 【Java】【leetcode第25题】K 个一组翻转链表

    文章仅供自己学习记录所用,若有侵权.联系我删除! 接着来个链表题(听说字节考了) [K 个一组翻转链表] 其实这道题是206题和24题结合的一个进阶版本,我觉得关键就是控制范围(反正我自己折磨了很久, ...

  2. K 个一组翻转链表(递归,Kotlin)

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...

  3. 20200329:K 个一组翻转链表(leetcode25)

    K 个一组翻转链表 题目 思路与算法 代码实现 复杂度分析 题目 思路与算法 注意题目里的常数的额外空间的要求,意味着不可以使用栈之类的数据结构. 这道链表题实际就是上一道的进阶版,指定每k个进行翻转 ...

  4. LeetCode--第25题K个一组翻转链表

    LeetCode–第25题K个一组翻转链表 题目描述 解决方案–C语言 主体是用递归的办法.递归三要素: 1.向上返回什么:一个处理好的子链表 2.返回条件是什么:要么是处于好了子链表,要么是因长度小 ...

  5. 清晰易懂的“K个一组翻转链表”解法

    题目来源:Leetcode K个一组翻转链表 一.题目 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍 ...

  6. 链表经典题:K个一组翻转链表

    题目: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定这 ...

  7. LeetCode 25K 个一组翻转链表26删除排序数组中的重复项

    如果问题或者其他方法还请分享,如加入打卡微信搜索bigsai回复进群一起打卡. K个一组翻转链表 题目要求 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小 ...

  8. 25. K 个一组翻转链表

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...

  9. 哔哩哔哩2020校园招聘 - K个一组翻转链表 一年中的第几天

    1.K个一组翻转链表 题目描述: 给你一个链表,每 k 个节点一组进行翻转,请返回翻转后的链表. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例 : 给定这个链表:1-&g ...

  10. 由力扣K 个一组翻转链表到360原创题

    前段时间帮对象做360笔试题时,遇到一个没怎么想明白的编程题,直到今天刷力扣遇到了相似的k个一组翻转链表后,想着在做一下那天的编程题,就想着记录一下遇到的难点. 力扣题如下图所示: 360原创题如下: ...

最新文章

  1. 十年“老司机”的私家锦囊:10个编程技巧、5个纠错步骤,让你的编程之路少点坎坷
  2. Protocol Buffer序列化协议及应用
  3. 怎么去除桌面图标显示快捷方式字样?
  4. jmeter学习笔记4 数据库插入
  5. Arcgis for Javascript实现两个地图的联动
  6. Java调用js方法
  7. repeater导出excel html,Repeater显示数据,并且导出到excel
  8. java文件日志功能_JAVA文件下载功能问题解决日志
  9. 后期处理之一:雾蒙蒙风景照片处理技巧
  10. vscode eslint 格式化完之后,一个标签多行,看的头疼
  11. 基于斗鱼的娱乐直播视频平台--Vue移动端页面
  12. 项目经理面试的一些问题讨论
  13. 教程:深入理解Flash的沙箱 – Application Domains
  14. 网络安全 — 零信任网络访问(ZTNA)
  15. 2021年全球手机市场,三星和华为都输了,其他手机企业赢了
  16. 郑州计算机c语言培训机构,c语言入门学习选郑州哪家计算机专业学校
  17. 18-Ansible常用模块-group模块
  18. 量化投资可转债策略--源代码
  19. TAPA认证辅导,TAPA全球委员会正式发布了《运输供应商最低安全要求》
  20. 八、jQuery的QQ音乐播放器

热门文章

  1. 31 天重构学习笔记索引
  2. Tomcat性能调优-JVM监控与调优
  3. Effective Java读书笔记六:方法
  4. Java异常处理和设计
  5. YARN/MRv2 Resource Manager深入剖析—RM总体架构
  6. 【Accelerated C++】重点回顾(续)
  7. 正确认识使用UML中的类图——辨析类图的两种存在形式
  8. 对 C++ 历史的个人观点
  9. 编程之美-程序理解和时间分析整理
  10. 在php的yii2框架中整合hbase库