链表
题意:
给定一个序列,和一个整数k.
序列中每k个元素一起反转,最后不够k个元素的就不处理.
序列以链表形式给出,要求O(1)空间.
思路:
这是一道链表的恶心题,要求O(1)空间那就不能用递归之类的,当然时间也是O(n)就最好了.
这样做,我们每k个每k个地进行处理,先从当前的头往后跑,跑到第k个就停下来,跑不到第k个的就可以返回了.
跑了一次之后,我们拥有的是这一组的头和尾,还有"上一组的尾",和"下一组的头".
注意,"上一组的尾"和"这一组的头"是处理上一组的时候更新好(一开始的"上一组的尾"是NULL).
对于每组内部的反转,用三个指针分别记录前一个结点pre,当前结点now,下一个结点nxt.
迭代过程,不断把当前结点的next指向前一个结点,再3个指针整体向右移.(一开始的now就是"这一组的头")
最后处理一下组与组之间的头尾部分,然后更新一下"上一组的尾"和"这一组的头"的值.
注意第一组要特判,因为整个链表的头部被改了,要更新一下.
总结:
3个指针一边改方向一边右移.