利用递归性质,可以得到大致的算法流程:
1、先反转以 head 开头的 k 个元素。
2、将第 k + 1 个元素作为 head 递归调用 reverseKGroup 函数
3、将上述两个过程的结果连接起来。
整体思路就是这样了,最后一点值得注意的是,递归函数都有个 base case,对于这个问题是什么呢?
题目说了,如果最后的元素不足 k 个,就保持不变。这就是 base case
class Solution:
def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
if not head:
return head
a = b = head
for i in range(k):
if not b:
return head
b = b.next
newHead = self.reverse(a, b)
a.next = self.reverseKGroup(b, k)
return newHead
def reverse(self, a, b):
pre = None
curr = a
nex = a
while curr != b:
nex = curr.next
curr.next = pre
pre = curr
curr = nex
return pre