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/rearange.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Additional/rearange.cpp (limited to 'Additional/rearange.cpp') diff --git a/Additional/rearange.cpp b/Additional/rearange.cpp new file mode 100644 index 0000000..48dacff --- /dev/null +++ b/Additional/rearange.cpp @@ -0,0 +1,55 @@ +#include +#include"../Seminar04/linked-list-utils.h" + +using ListNode = LinkedListNode; + +ListNode* rearange(ListNode* head) { + ListNode* oddStart = nullptr; + ListNode* oddIter = nullptr; + + ListNode* evenStart = nullptr; + ListNode* evenIter = nullptr; + + while(head != nullptr) { + if(head->data % 2 == 1) { + if(oddIter == nullptr) { + oddStart = head; + oddIter = head; + } + else { + oddIter->next = head; + oddIter = oddIter->next; + } + } + else { + if(evenIter == nullptr) { + evenStart = head; + evenIter = head; + } + else { + evenIter->next = head; + evenIter = evenIter->next; + } + } + + head = head->next; + } + + if(evenStart == nullptr) + return oddStart; + + evenIter->next = oddStart; + + if(oddIter != nullptr) + oddIter->next = nullptr; + + return evenStart; +} + +int main() { + ListNode* ll = new ListNode(3, new ListNode(5, new ListNode(2, new ListNode(9, new ListNode(4))))); + ListNode* res = rearange(ll); + + printLinkedList(res); + freeList(res); +} \ No newline at end of file -- cgit v1.3.1-23-gd82d