Reverse Nodes in k-Group — Recursive Group Reversal
Advertisement
Problem 244 · Reverse Nodes in k-Group
Difficulty: Hard · Pattern: Recursive Group Reversal
Reverse every k nodes. If fewer than k remain, leave as-is.
Solutions
# Python
def reverseKGroup(head, k):
# Check if k nodes exist
cur = head
for _ in range(k):
if not cur: return head
cur = cur.next
# Reverse k nodes
prev, curr = None, head
for _ in range(k):
nxt = curr.next; curr.next = prev; prev = curr; curr = nxt
# head is now the tail of reversed group
head.next = reverseKGroup(curr, k)
return prev
// Java
public ListNode reverseKGroup(ListNode head, int k) {
ListNode cur = head;
for (int i = 0; i < k; i++) {
if (cur == null) return head;
cur = cur.next;
}
ListNode prev = null, curr = head;
for (int i = 0; i < k; i++) {
ListNode nxt = curr.next; curr.next = prev; prev = curr; curr = nxt;
}
head.next = reverseKGroup(curr, k);
return prev;
}
// C++
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* cur = head;
for (int i = 0; i < k; i++) {
if (!cur) return head;
cur = cur->next;
}
ListNode *prev = nullptr, *curr = head;
for (int i = 0; i < k; i++) {
ListNode *nxt = curr->next; curr->next = prev; prev = curr; curr = nxt;
}
head->next = reverseKGroup(curr, k);
return prev;
}
Complexity
- Time: O(n)
- Space: O(n/k) recursive stack
Advertisement