From 8c1753a1a200cbe0c23c2178a35e1b8b8c57bf64 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev Date: Tue, 22 Nov 2022 23:57:23 +0200 Subject: Add additional --- Additional/reverse-nodes-in-k-group.cpp | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Additional/reverse-nodes-in-k-group.cpp (limited to 'Additional/reverse-nodes-in-k-group.cpp') 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 +#include"../Seminar04/linked-list-utils.h" + +using ListNode = LinkedListNode; + +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 -- cgit v1.3.1-23-gd82d