这道题的要求是结点按照k个一组,分别反转链表;
题目分析
- 递归法
这道题目是典型的递归题目。很容易想到先反转前k个结点,之后再将k+1个结点作为参数递归调用主函数,最后再将两串连接起来即可。只要有递归,就需要考虑base case,这里的base case是当结点数量不足k个时,不做任何操作直接返回。接下来需要考虑如何反转前k个结点,我们把前k个结点整体看作一个链表,可以用反转整个链表的函数。反转整个函数是在尾巴处的null停止,在这里,因为我们判断结点数量的时候,可以顺便获得第k+1个结点的指针,它就是小链表的尾巴。我们将尾指针null直接替换成第k+1个结点的指针即可。 - 迭代法
把反转开始结点和结束结点识别出来,并利用其进行判断。
关键点
- 递归;
- 问题从大逐渐拆小;
- 抽象能力,把只能解决特殊情况扩展为解决一般情况,比如,反转整个链表到反转前n个结点,再到反转m到n个结点;
- 链表是一种既具备递归性质,又有迭代性质的数据结构。