首页
学习
活动
专区
工具
TVP
发布

K 一组翻转链表

给你链表的头节点 head ,每 k 节点一组进行翻转,请你返回修改后的链表k 是一正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...我们需要把链表节点按照 k 一组分组,所以可以使用一指针 head 依次指向每组的头节点。这个指针每次向前移动 k 步,直至链表结尾。对于每个分组,我们先判断它的长度是否大于等于 k。...若是,我们就翻转这部分链表,否则不需要翻转。 接下来的问题就是如何翻转分组内的子链表翻转链表并不难,过程可以参考「206. 反转链表」。...但是对于一链表,除了翻转其本身之外,还需要将子链表的头部与上一链表连接,以及子链表的尾部与下一链表连接。...有的同学可能发现这又是一件麻烦事:链表翻转之后,链表的头节点发生了变化,那么应该返回哪个节点呢?照理来说,前 k 节点翻转之后,链表的头节点应该是第 k 节点。

12270
您找到你想要的搜索结果了吗?
是的
没有找到

LeetCode - K一组翻转链表

给你一链表,每 k 节点一组进行翻转,请你返回翻转后的链表。...k 是一正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...使用栈去做一ListNode的存储,保证刚好K时可以去实现翻转。...新建一pre用于表示当前翻转链表的前置,h表示当前的头部 遍历列表,遍历一,就把该节点放入Stack中,然后计数 当计数达到K时,说明该翻转了,于是就从Stack中不停的获取最后一,将pre指针指到当前的翻转过的最后一元素...如果计数达不到K,说明已经没有更多的ListNode了,这个时候,就可以直接从Stack中取出元素,执行翻转操作。 最后,返回h这个链表的头部即可。

42530

K 一组翻转链表(leetcode 25)

1.问题描述 给你链表的头节点 head ,每 k 节点一组进行翻转,请你返回修改后的链表k 是一正整数,它的值小于或等于链表的长度。...4.解题思路 思路 这道题是反转链表(leetcode 206)的进阶版本,可以看成是有 n 长度为 k链表进行反转然后拼接在一起。 所以,反转链表是基础,需要先了解一下反转链表的实现。...= nil { next := cur.Next cur.Next = pre pre = cur cur = next } return pre } 对于一链表,除了翻转其本身之外...反复移动指针 head 与 pre,对 head 所指向的子链表进行翻转,直到结尾,我们就得到了答案。 复杂度分析 时间复杂度:O(n),其中 n 为链表的长度。...head 指针会在 O(⌊n/k⌋) 结点上停留,每次停留需要进行一次 O(k) 的翻转操作。 空间复杂度:O(1),我们只需要建立常数个变量。

13120

LeetCode:K一组翻转链表_25

思路 反转链表II_92的进阶,主要是利用递归思想,拆解重复问题。 题目 给你一链表,每 k 节点一组进行翻转,请你返回翻转后的链表k 是一正整数,它的值小于或等于链表的长度。...如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 进阶: 你可以设计一只使用常数额外空间的算法来解决此问题吗? 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。...sz 内 1 <= sz <= 5000 0 <= Node.val <= 1000 1 <= k <= sz Related Topics 递归 链表 1304 0 代码 public...null; } // 找到下一反转区间内的头结点 ListNode nextHead = head;...head; } nextHead = nextHead.next; } // 反转两节点内的链表

15510

K 一组翻转链表

题目 给你一链表,每 k 节点一组进行翻转,请你返回翻转后的链表k 是一正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...示例 : 给定这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明 : 你的算法只能使用常数的额外空间...解题 2.1 解法1 先反转整条链表,并计算长度 再处理开头几个不用反转的,再多次反转后面 n*k 最后再反转一次链表 给定这个链表:1->2->3->4->5,k=2 -1-反转操作,5->4->...;//反转k, cur、nt是引用 if(flag)//如果前面0不用反转 { H = newhead;//表头就是第一反转后的表头...end)//如果end为空,说明,不够k flag = true;//这一段不足k,提前结束了 else//够k,需要反转

24920

LeetCode 实战:「图解」K 一组翻转链表

来源 | 五分钟学算法 题目描述 给你一链表,每 k 节点一组进行翻转,请你返回翻转后的链表k 是一正整数,它的值小于或等于链表的长度。...题目解析 题目要求在一链表中以 k 链表节点为单位进行反转,什么意思呢?...你可以想象把一很长的链表分成很多个小链表,每一份的长度都是 k (最后一份的长度如果小于 k 则不需要反转),然后对每个小链表进行反转,最后将所有反转后的小链表按之前的顺序拼接在一起。...所以这个题目实现的时候要把握住几个要点: 第一,在反转子链表的时候,上一链表的尾必须知道 第二,下一链表的头也必须知道 第三,当前反转的链表的头尾都必须知道 动画描述 代码实现 public...if (i == k) { // 记录下一链表的头 ListNode nextGroup = pointer.next; /

1.1K20

k一组翻转链表(leetcode25)

给你一链表,每 k 节点一组进行翻转,请你返回翻转后的链表k 是一正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5] 解析: 我们需要把链表节点按照 k 一组分组,所以可以使用一指针 head 依次指向每组的头节点。...这个指针每次向前移动 k 步,直至链表结尾。对于每个分组,我们先判断它的长度是否大于等于 k。若是,我们就翻转这部分链表,否则不需要翻转。 接下来的问题就是如何翻转分组内的子链表。...但是对于一链表,除了翻转其本身之外,还需要将子链表的头部与上一链表连接,以及子链表的尾部与下一链表连接。...因此,在翻转链表的时候,我们不仅需要子链表头节点 head,还需要有 head 的上一节点 pre,以便翻转完后把子链表再接回 pre。

39410

Leetcode No.25 K 一组翻转链表

一、题目描述 给你一链表,每 k 节点一组进行翻转,请你返回翻转后的链表k 是一正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...二、解题思路 大致过程可以分解为 1、找到待翻转k节点(注意:若剩余数量小于 k 的话,则不需要反转,因此直接返回待翻转部分的头结点即可)。 2、对其进行翻转。...并返回翻转后的头结点(注意:翻转为左闭又开区间,所以本轮操作的尾结点其实就是下一轮操作的头结点)。 3、对下一轮 k 节点也进行翻转操作。...4、将上一轮翻转后的尾结点指向下一轮翻转后的头节点,即将每一轮翻转k的节点连接起来。...head 指针会在 O(n/k 向下取整) 结点上停留,每次停留需要进行一次 O(k) 的翻转操作。 空间复杂度:O(1),我们只需要建立常数个变量。

24120

LeetCode25:K一组翻转链表

leetcode25:K一组翻转链表 1、题目描述 2、解题思路 3、代码实现 1、题目描述   给你链表的头节点 head ,每 k 节点一组进行翻转,请你返回修改后的链表。...k 是一正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。   你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。...prev指向需要翻转的前一结点,也就说把prev所指向的结点当作头插法的头结点,依次执行k-1次头插,循环结束之后,赋值prev=curr,让prev继续指向下一次需要翻转结点的前一结点,也就是说让...listNode=listNode.next; } System.out.println(); } } 算法实现: //leetcode25:K一组翻转链表...ListNode listNode = reverseKGroup(l1, 2); //遍历 ListNode.list(listNode); } 上面我们2一组翻转链表

14430

最难链表题——LeetCode题目25:K 一组翻转链表

原题描述 + 给你一链表,每 k 节点一组进行翻转,请你返回翻转后的链表k 是一正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。...K节点组成的链表中的头节点,类似于上面题目中的first位置; K节点组成的链表中的尾节点,类似于上面题目中的second位置; 处于K节点之后的子链表中,首个节点的位置,类似于上面题目中的head...找到上述四位置之后,我们只需要再将K节点组成的子链表逆序翻转即可。但这个翻转有坑,因为你要保证在翻转之后,新的头节点和前面的子链表相连,新的尾节点与后面的子链表相连。...先找到四重要位置 ? 2. 翻转K节点的子链表 ? 3. 将翻转后的子链表与外部链表相连 ?...此外,每次翻转之后,head指针要后移到未操作部分链表的首部,继续翻转下一长度为K的子链表。 /** * Definition for singly-linked list.

71720

Leetcode打卡 | No.25 k 一组翻转链表

一组翻转链表 给出一链表,每 k 节点一组进行翻转,并返回翻转后的链表。...k 是一正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。...简单分析下思路 : 链表长度应该是大于给定值 k 的 ,可以分两种情况进行处理 。 一种是连续 k 节点做翻转 ,之后将多个链表片段进行整合 。...另一种是链表结尾多出的几个节点 ,不够 k 节点的那部分保留不做翻转 。 以下是讨论区的代码 ,验证可行 。...说实话 ,小詹自己是没想到 ,小詹自己想到的是相邻两翻转 ,依次往后 ,但是没能实现 。。下边代码建议自己假设一案例复现 ,顺着思路走能看懂 ,但是自己写就是另一回事了 ……手生了哎 ?

36220
领券