leetcode 25.Reverse Nodes in k-Group

链表


题意:

给定一个序列,和一个整数k.

序列中每k个元素一起反转,最后不够k个元素的就不处理.

序列以链表形式给出,要求O(1)空间.


思路:

这是一道链表的恶心题,要求O(1)空间那就不能用递归之类的,当然时间也是O(n)就最好了.


这样做,我们每k个每k个地进行处理,先从当前的头往后跑,跑到第k个就停下来,跑不到第k个的就可以返回了.

跑了一次之后,我们拥有的是这一组的头和尾,还有"上一组的尾",和"下一组的头".

注意,"上一组的尾"和"这一组的头"是处理上一组的时候更新好(一开始的"上一组的尾"是NULL).


对于每组内部的反转,用三个指针分别记录前一个结点pre,当前结点now,下一个结点nxt.

迭代过程,不断把当前结点的next指向前一个结点,再3个指针整体向右移.(一开始的now就是"这一组的头")

最后处理一下组与组之间的头尾部分,然后更新一下"上一组的尾"和"这一组的头"的值.


注意第一组要特判,因为整个链表的头部被改了,要更新一下.


总结:

3个指针一边改方向一边右移.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值