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

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

示例 :

给定这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

说明 :

你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

思路:找k链表的两头,反转中间,并且操作连接部分的各种指针。代码有详细注释

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy = new ListNode(0);dummy.next = head;ListNode pre = dummy;ListNode end = dummy;while (end.next != null) {//1、找k个for (int i = 0; i < k && end != null; i++) end = end.next;//2、不足k个按原顺序,不用改变if (end == null) break;//3、记录反转链表的起点ListNode start = pre.next;//4、记录反转链表结尾的下一个节点ListNode next = end.next;//5、把反转链表的next赋值为null,方便调用reverse()end.next = null;//6、前节点的下一个节点是反转后的新头pre.next = reverse(start);//7、反转后的链表尾(之前的翻转起点)的next赋值为之前第4步记录的nextstart.next = next;//8、更新下一个要翻转k链表的前一个节点(也就是本次反转后的末尾)pre = start;//9、赋值end,为下一次循环的第一步做准备end = pre;}return dummy.next;}//翻转标准链表(最后节点的next是null),返回新链表的头private ListNode reverse(ListNode head) {ListNode pre = null;//前节点ListNode curr = head;//操作的节点while (curr != null) {//记录本次节点的下一个节点ListNode next = curr.next;//赋值本次节点的next为前节点curr.next = pre;//更新前节点和操作节点pre = curr;curr = next;}return pre;}
}

leetcode25. K 个一组翻转链表相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Leetcode-递归/反转链表模板-25. K 个一组翻转链表

    题目25. K 个一组翻转链表: 题解: 模拟 以K个为一组,进行常规反转,重点是要保留反转前的头节点,以及第K+1个节点,将其反转之后连接起来 代码: /*** Definition for sin ...

最新文章

  1. python使用matplotlib可视化线图(line plot)、将可视化图像的图例(legend)放置在图像外部、底部区域
  2. Vue中的前后台交互
  3. Visual C++语言编程开发详解(孙鑫老师)
  4. mysql空洞_optimize table 删除空洞--MYSQL
  5. Linux文件操作四剑客常用命令
  6. 【通知】有三AI书籍和文化产品读者欢迎入群,送4本书!
  7. HDU 4405 Aeroplane chess(期望DP)
  8. viewsource和viewparsed_(Summary)Developer Tools:IE9的F12,Chrome的Ctrl+Shift+J比较
  9. Pandas+Pyecharts:2021中国大学综合排名分析+可视化,来围观看看你的大学上榜没
  10. Android——最全的系统对话框(AlertDialog)详解
  11. php动态交叉表,SQLServer:SQL实现动态交叉表
  12. 【struts2】继承ActionSupport类
  13. 编译原理第四章--自上而下的语法分析
  14. 阿里巴巴校招内推一面总结
  15. “构建全球科技创新生态科技思想家”王煜全如是说(2019.4.23清水湾思享会第13期嘉宾)...
  16. 我的小游戏上线海外AppStore完整流程心得
  17. pytorch 定义torch类型数据_PyTorch 使用TorchText进行文本分类
  18. 在LaTeX中配置西夏文字体与环境
  19. NodeMCU-刷写AT固件
  20. JAVA swing实现简单的学生管理系统

热门文章

  1. 2020.2idea创建web_使用IDEA配置Tomcat(亲测成功)
  2. matlab如何提高运算速速,如何提高以下程序的运算速度及有选择性的保存数据?...
  3. 怎么修改提交git是的用户名_Git 修改用户名以及提交邮箱
  4. python append函数_让你python代码更快的3个小技巧!速度提高了一倍还多
  5. 禁止word另存为,禁止图片另存为excel禁止另存为
  6. Web应用系统中数据传递的方式汇总
  7. sleep期间读取所有_ceph部分数据所有副本先后故障的抢救
  8. Spark-自定义累加器-进行字符串拼接(代码及详细实现步骤)
  9. JAVA-入门(内含jdk配置)
  10. mongo更新数组字段_更新mongodb中嵌套数组中的几个字段(使用pymongo)