# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverse(self,head,tail):
res = ListNode(0)
prev = res
cur = head
while prev!=tail:
tmp =cur.next
cur.next = prev
prev = cur
cur = tmp
return tail , head
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
# 每次把一个group里面的东西翻转,然后把首位节点的指针做一下
dummy = ListNode(0)
dummy.next = head
pre = dummy
while head:
tail = pre
for i in range(k):
tail = tail.next
if not tail:
return dummy.next
nex = tail.next
head , tail = self.reverse(head,tail)
pre.next = head
tail.next = nex
pre = tail
head = tail.next
return dummy.next
# dummy = ListNode(0)
# length = 0
# p = head
# while p:
# p = p.next
# length += 1
# prev = dummy
# cur = head
# while length > k:
# head = cur
# for i in range(k-1):
# cur = cur.next
# tail = cur
# prev.next = head
# tail.next = cur
# prev = tail
# length -= k
最麻烦的是前后的链接处的处理,这里给一个pre是最好的