Skip to content

Commit 341fbed

Browse files
committed
Implement q_reverseK
Previously, q_reverseK was a placeholder and did nothing. Now it correctly reverses nodes in k-sized groups by moving elements within the list while keeping group order. Change-Id: I62d5c11ec01728552f9d855ea5ad5a348ff710ed
1 parent 681806a commit 341fbed

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

queue.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,23 @@ void q_reverseK(struct list_head *head, int k)
176176
// https://leetcode.com/problems/reverse-nodes-in-k-group/
177177
if (!head || list_empty(head))
178178
return;
179+
struct list_head *curr = head->next, *safe, *dummy = head;
180+
int count = k;
181+
int group_count = q_size(head) / k;
182+
while (curr != dummy) {
183+
while (count > 0) {
184+
safe = curr->next;
185+
list_move(curr, dummy);
186+
curr = safe;
187+
count--;
188+
}
189+
group_count--;
190+
if (group_count == 0)
191+
break;
192+
dummy = curr->prev;
193+
curr = curr->next;
194+
count = k - 1;
195+
}
179196
}
180197

181198
/* Sort elements of queue in ascending/descending order */

0 commit comments

Comments
 (0)