Skip to content

Linked List Block Reversal

LeetCode

01 · Question

Given the head of a linked list and an integer k, reverse nodes in groups of k. If the final group has fewer than k nodes, leave it as is.

02 · Solution

Reference solution

1def reverseKGroup(head: Optional[ListNode], k: int) -> Optional[ListNode]:
2 dummy = ListNode(0)
3 dummy.next = head
4 group_prev = dummy
5 while True:
6 kth = group_prev
7 for _ in range(k):
8 kth = kth.next
9 if not kth:
10 return dummy.next
11 group_next = kth.next
12 prev, cur = group_next, group_prev.next
13 while cur != group_next:
14 nxt = cur.next
15 cur.next = prev
16 prev = cur
17 cur = nxt
18 tmp = group_prev.next
19 group_prev.next = kth
20 group_prev = tmp