Website Summary Files Commits Branches @commit @diff @stats
path: root / Additional / reverse-nodes-in-k-group.cpp
diff options
context:
space:
mode:
1 files changed, 54 insertions, 0 deletions
-rw-r--r--Additional/reverse-nodes-in-k-group.cpp54
diff --git a/Additional/reverse-nodes-in-k-group.cpp b/Additional/reverse-nodes-in-k-group.cpp
new file mode 100644
index 0000000..70b63fd
--- /dev/null
+++ b/Additional/reverse-nodes-in-k-group.cpp
@@ -0,0 +1,54 @@
+#include<iostream>
+#include"../Seminar04/linked-list-utils.h"
+
+using ListNode = LinkedListNode<int>;
+
+ListNode* getNext(ListNode* head, int k) {
+ while(k && head) {
+ head = head->next;
+ --k;
+ }
+
+ return head;
+}
+
+ListNode* reverse(ListNode*& head) {
+ ListNode* next = nullptr;
+ ListNode* prev = nullptr;
+ ListNode* it = head;
+ ListNode* tmp = head;
+
+ while(it) {
+ next = it->next;
+ it->next = prev;
+ prev = it;
+ it = next;
+ }
+
+ head = prev;
+ return tmp;
+}
+
+ListNode* reverseKGroup(ListNode* head, int k) {
+ ListNode* end = getNext(head, k - 1);
+
+ if(end == nullptr)
+ return head;
+
+ ListNode* next = end->next;
+
+ end->next = nullptr;
+
+ ListNode* last = reverse(head);
+ ListNode* res = reverseKGroup(next, k);
+
+ last->next = res;
+ return head;
+}
+
+int main() {
+ ListNode* ll = fromList({1, 2, 3, 4, 5, 6, 7,8 ,9,10, 11, 12, 13, 14, 15, 16, 17});
+ ll = reverseKGroup(ll, 4);
+ printLinkedList(ll);
+ freeList(ll);
+} \ No newline at end of file