Website Summary Files Commits Branches @commit @diff @stats
path: root / Additional / reverse-nodes-in-k-group.cpp
diff options
context:
space:
mode:
Commit8c1753a1a200cbe0c23c2178a35e1b8b8c57bf64 (patch)
Author
 Stoycho Kyosev <stoycho.kk@gmail.com>
2022-11-22 23:57:23 +0200
Committer
 Stoycho Kyosev <stoycho.kk@gmail.com>
2022-11-22 23:57:23 +0200
Files5ccc337050428a14c1ff73f5443d32031bbb1f38 /Additional/reverse-nodes-in-k-group.cpp
Data-structures-and-algorithms-8c1753a1a200cbe0c23c2178a35e1b8b8c57bf64.tar
Data-structures-and-algorithms-8c1753a1a200cbe0c23c2178a35e1b8b8c57bf64.tar.gz
Data-structures-and-algorithms-8c1753a1a200cbe0c23c2178a35e1b8b8c57bf64.zip
Parent74f5fe6f7c4222fc52479c6ef598f830f6049949 (diff)
Add additional
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