Linked List Block Reversal

LeetCode

LeetCode: https://leetcode.com/problems/reverse-nodes-in-k-group/

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.

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
1
0
2
1
3
2
4
3
k=2
group=[1, 2]
Step 1 / 3
Step 1:
Identify the first group of k=2 nodes.
Focus: select @ [0, 1]
k=2