文章仅供自己学习记录所用,若有侵权、联系我删除!

接着来个链表题(听说字节考了) 【K 个一组翻转链表】
其实这道题是206题和24题结合的一个进阶版本,我觉得关键就是控制范围(反正我自己折磨了很久,大意都好弄清楚,就是范围控制搞得我。。。。。)

先来看看:给个K值,那么那就是按照KK交换链表(当k = 2 就是两两交换链表,24题)

上图这个leetcode原例子

那我们就假设K=3
老规矩,先来判断条件

if(head==null||head.next==null)return head;

好的,剩下就是要安排的了。
那我们先来两个指针

  1  -> 2 -> 3  -> 4 -> 5 -> 6 ->7
head
tailtou
 ListNode tail = head;ListNode tou =head;

这个tou和head指向意思就很清晰,不解释了,tail的话

这个tail是指K的下一个

这个很重要,现在K=3,那么

为什么这样呢?
因为这题用的递归,那我们先把链表按照

每K个一段


那这样的话,不管多少段,tail都是每一段的第一个,
那递归传入参数是不是就有了?

tail就是递归传入参数

好,我们先把tail指向K的下一个再说

 for (int i = 0; i < k; i++) {if(tail==null) return tou;tail = tail.next;}

这里要判断,万一K=3,我链表只有两个元素,那还反转什么,直接返回就行了;
现在的代码已经有这些了

 if(head==null||head.next==null)return head;ListNode tail = head;ListNode tou =head;for (int i = 0; i < k; i++) {if(tail==null) return tou;tail = tail.next;}

好,关键来了:

按照我自己第206题讲的

这个时候其实就是把206的范围改一改,范围怎么说呢?
先看看我写的代码

 public static ListNode reverseList(ListNode head,ListNode tail) {ListNode pre = null;//定义一个preListNode cur = head;//定义一个cur指针用来遍历ListNode temp = null;//记录正在反转的节点下一个节点while (cur!=tail) {temp = cur.next;cur.next = pre;pre = cur;cur = temp;}return pre;}

改了的地方是 判断条件

cur !=tail

那循环结束,指针是不是这样的?

/****************/

摆整齐

注意这里的head
head从头到尾都指向的是1 没变过
那就是说,每一段最后head都会指向排序好的最后一个

那我把head.next指向tail是不是就把每一段连接起来了?

芜湖,然后第一段就搞定了,接下来是不是第二段了?
进入递归了对吧?

head.next = reverseKGroup(tail,k);

tail是不是指4,是不是下一段开头第一个节点?
这里

然后上面说了
head.next指向tail是把每一段连接起来了

就是这个图;

okk,到这里,每一段怎么做就搞定了

所以

 ListNode pre = reverseList(head,tail);

诶?这里pre指的是什么?
在206题的时候,最后的指针指向是不是这样?

  null  <-  1   <-    2    <-    3    <-    4    <-   5temppre      cur

那pre在这里返回的就是第一段的第一个,那就是3对吧?
诶嘿?
那这个链表,我管你有多少,第一个节点是不是3?
那就按照这个例子来说

最后链表是这样对吧?
那我直接返回pre不就是链表头结点了吗?
返回值也有了

所以,全部代码就是这了:

 public ListNode reverseKGroup(ListNode head, int k) {if(head==null||head.next==null)return head;ListNode tail = head;ListNode tou =head;for (int i = 0; i < k; i++) {if(tail==null) return tou;tail = tail.next;}//这里是反转链表ListNode pre = reverseList(head,tail);//这里是递归调用head.next = reverseKGroup(tail,k);return pre;}public static ListNode reverseList(ListNode head,ListNode tail) {ListNode pre = null;//定义一个preListNode cur = head;//定义一个cur指针用来遍历ListNode temp = null;//记录正在反转的节点下一个节点while (cur!=tail) {temp = cur.next;cur.next = pre;pre = cur;cur = temp;}return pre;}

代码已经AC


文章仅用于我学习记录所用,有些部分是从其他地方借鉴学习而来,如内容有所侵权,联系我删除,如果还有其他想和我讨论的,欢迎大家联系我!!
一起打卡学习!

【Java】【leetcode第25题】K 个一组翻转链表相关推荐

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

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

  2. [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]

    [问题描述][第25题][K个一组反转链表][困难] 时间复杂度:O(N^2) 空间复杂度:O(1) ```java 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表.k 是一个正整数, ...

  3. leetcode算法题--K 个一组翻转链表

    原题链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ ListNode* reverseList(ListNode* head ...

  4. 力扣【25】K个一组翻转链表(字节跳动面试题)

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Celery 进阶使用
  2. html和css入门 (三)
  3. poj2175费用流消圈算法
  4. ps里面怎么插入流程图_photoshop cs6绘画带箭头简单流程图的操作步骤介绍
  5. 对hash签名失败_详解Vue开发微信H5微信分享签名失败问题解决方案
  6. 点击文字,把input type=radio也选中
  7. 2019年第十届蓝桥杯 - 省赛 - C/C++大学A组 - G. 日期问题
  8. MybatisPlus实现分页
  9. 讲讲 group by 的实现原理
  10. Mysql优化(三):优化order by
  11. 购物商城Web开发第十天
  12. matlab得到小波参数,MATLAB|高频信号的小波分析技术要点
  13. 【Codecs系列】HEVC标准(九):环路滤波技术之SAO
  14. 个人小项目原型图设计(主页)
  15. JAVA+=运算程序诡异事件
  16. CentOS8桌面图标不显示
  17. 【休闲益智】【HTML】看字说颜色
  18. 前端学习笔记:CSS学习之选择器篇
  19. excel中文显示乱码
  20. 【SCI投稿委婉催稿信模板】

热门文章

  1. Mail merge region 'tablePrint' is badly formed. TableStart and TableEnd should be in the same sectio
  2. 揭秘!节日是这样被制造的,用户画像在营销的实战应用
  3. 计算机硬盘和内存的对比,升级DDR4内存对电脑性能 看看比DDR3快多少
  4. 10kV光伏并网用电能质量在线监测装置
  5. Java的重载和重写
  6. python全栈开发实践入门_讲书3分钟丨《Python全栈开发实践入门》 -讲书人 谢瑛俊...
  7. 分区 Partitions
  8. 朱江明带领零跑“零跑”新能源
  9. 如何选择适合你的兴趣爱好(四十三),国际象棋
  10. 电话聊天狂人 【STL】