【Java】【leetcode第25题】K 个一组翻转链表
文章仅供自己学习记录所用,若有侵权、联系我删除!
接着来个链表题(听说字节考了) 【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 个一组翻转链表相关推荐
- LeetCode--第25题K个一组翻转链表
LeetCode–第25题K个一组翻转链表 题目描述 解决方案–C语言 主体是用递归的办法.递归三要素: 1.向上返回什么:一个处理好的子链表 2.返回条件是什么:要么是处于好了子链表,要么是因长度小 ...
- [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]
[问题描述][第25题][K个一组反转链表][困难] 时间复杂度:O(N^2) 空间复杂度:O(1) ```java 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表.k 是一个正整数, ...
- leetcode算法题--K 个一组翻转链表
原题链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ ListNode* reverseList(ListNode* head ...
- 力扣【25】K个一组翻转链表(字节跳动面试题)
题目: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 进阶: ...
- 25. K 个一组翻转链表
25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...
- 由力扣K 个一组翻转链表到360原创题
前段时间帮对象做360笔试题时,遇到一个没怎么想明白的编程题,直到今天刷力扣遇到了相似的k个一组翻转链表后,想着在做一下那天的编程题,就想着记录一下遇到的难点. 力扣题如下图所示: 360原创题如下: ...
- Leetcode-递归/反转链表模板-25. K 个一组翻转链表
题目25. K 个一组翻转链表: 题解: 模拟 以K个为一组,进行常规反转,重点是要保留反转前的头节点,以及第K+1个节点,将其反转之后连接起来 代码: /*** Definition for sin ...
- 链表经典题:K个一组翻转链表
题目: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定这 ...
- K 个一组翻转链表(递归,Kotlin)
25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...
最新文章
- Celery 进阶使用
- html和css入门 (三)
- poj2175费用流消圈算法
- ps里面怎么插入流程图_photoshop cs6绘画带箭头简单流程图的操作步骤介绍
- 对hash签名失败_详解Vue开发微信H5微信分享签名失败问题解决方案
- 点击文字,把input type=radio也选中
- 2019年第十届蓝桥杯 - 省赛 - C/C++大学A组 - G. 日期问题
- MybatisPlus实现分页
- 讲讲 group by 的实现原理
- Mysql优化(三):优化order by
- 购物商城Web开发第十天
- matlab得到小波参数,MATLAB|高频信号的小波分析技术要点
- 【Codecs系列】HEVC标准(九):环路滤波技术之SAO
- 个人小项目原型图设计(主页)
- JAVA+=运算程序诡异事件
- CentOS8桌面图标不显示
- 【休闲益智】【HTML】看字说颜色
- 前端学习笔记:CSS学习之选择器篇
- excel中文显示乱码
- 【SCI投稿委婉催稿信模板】
热门文章
- Mail merge region 'tablePrint' is badly formed. TableStart and TableEnd should be in the same sectio
- 揭秘!节日是这样被制造的,用户画像在营销的实战应用
- 计算机硬盘和内存的对比,升级DDR4内存对电脑性能 看看比DDR3快多少
- 10kV光伏并网用电能质量在线监测装置
- Java的重载和重写
- python全栈开发实践入门_讲书3分钟丨《Python全栈开发实践入门》 -讲书人 谢瑛俊...
- 分区 Partitions
- 朱江明带领零跑“零跑”新能源
- 如何选择适合你的兴趣爱好(四十三),国际象棋
- 电话聊天狂人 【STL】