单链表每k个一组反转(python)
题目:
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
具体做法:k = 3
- step 1:每次从进入函数的头节点优先遍历链表k次,分出一组,若是后续不足k个节点,不用反转直接返回头。
- step 2:从进入函数的头节点开始,依次反转接下来的一组链表
- step 3:这一组经过反转后,原来的头变成了尾,后面接下一组的反转结果,下一组采用上述递归继续。









def reverseKGroup(self , head: ListNode, k: int) -> ListNode:
# write code here
#找到每次翻转的尾部
tail = head
#遍历k次到尾部
for i in range(0,k):
#如果不足k到了链表尾,直接返回,不翻转
if tail == None:
return head
tail = tail.next
#翻转时需要的前序和当前节点
pre = None
cur = head
#在到达当前段尾节点前
while cur != tail:
#翻转
temp = cur.next
cur.next = pre
pre = cur
cur = temp
#当前尾指向下一段要翻转的链表
head.next = self.reverseKGroup(tail, k)
return pre

浙公网安备 33010602011771号