这题的主要思想是递归,用到了四个指针,head,tail,pre,curr
tail指针用于确定下一次K个数组队头的位置和内部循环条件的确定
head指针的作用只有一个,递归完成后需要接链,由于有了局部反转,最后接起来的是head.next
pre,curr依旧用于局部反转
class Solution:
def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
# write code here
#新建tail指针,这是个局部位置
tail=head
#定位tail指针下一次的位置
for i in range(0,k):
if not tail:
return head
#遍历,找到下一次递归开始的地方
tail=tail.next
#开始写局部反转
pre=None
curr=head
#循环判断条件,局部反转完成
while curr!=tail:
#存起来
temp=curr.next
curr.next=pre
pre=curr
curr=temp
#递归到最后会依次把这个链子给接起来,由于有过反转,所以返回值接的是head.next,也就的是原来的队头元素
head.next=self.reverseKGroup(tail,k)