题目大意,将链表按每k个节点分组,要求把每组组内反转,如果末尾不足k则不反转。并且要求使用链表原有空间。
将k=2与k>2的情况分开处理。
如果k=2,我们就使用上一题的处理办法。
如果k>2,我们对每一块进行处理。先扫描这块是否有k个节点,若没有就返回head。然后把一块中分成头节点,中间节点,尾节点处理。先令中间节点的next的指针都指向他们的前一个节点,通过扫描时保留前一个节点的指针实现。然后令头节点的next指针指向尾节点的next,尾节点的next指针指向头节点,上一个块反转后的尾节点next指向尾节点。如此这般按块处理下去,直到完成。第一个块需要特殊处理,因为可能要改变head指针。如图所示。