Skip to content

Commit f66f0ab

Browse files
Create 25. Reverse Nodes in k-Group.cpp
It is a C++ code snippet solution for leetcode question 25. Reverse Nodes in k-Group (Hard). It is solved using three pointers: previous, current & next. It uses an iterative approach.
1 parent bbce8fb commit f66f0ab

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

25. Reverse Nodes in k-Group.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
class Solution {
2+
public:
3+
void reverse(ListNode *start, ListNode *end)
4+
{
5+
ListNode *prev = NULL;
6+
ListNode *curr = start;
7+
ListNode *nexty = start->next;
8+
9+
while(prev!=end)
10+
{
11+
curr->next = prev;
12+
prev = curr;
13+
curr = nexty;
14+
15+
if(nexty!=NULL)
16+
{
17+
nexty = nexty->next;
18+
}
19+
}
20+
21+
}
22+
23+
ListNode* reverseKGroup(ListNode* head, int k) {
24+
25+
if(head==NULL || head->next == NULL || k==1)
26+
return head;
27+
28+
ListNode *dummy = new ListNode(-1);
29+
dummy->next = head;
30+
ListNode *beforeStart = dummy, *end = head;
31+
int i=0;
32+
while(end!=NULL)
33+
{
34+
i++;
35+
if(i%k==0)
36+
{
37+
//reversal
38+
ListNode *start = beforeStart->next, *temp = end->next;
39+
reverse(start,end);
40+
beforeStart->next = end;
41+
start->next = temp;
42+
beforeStart = start;
43+
end = temp;
44+
}
45+
else
46+
{
47+
end = end->next;
48+
}
49+
50+
}
51+
return dummy->next;
52+
}
53+
};

0 commit comments

Comments
 (0)