diff options
Add additional
1 files changed, 54 insertions, 0 deletions
| -rw-r--r-- | Additional/reverse-nodes-in-k-group.cpp | 54 |
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 |
