Website Summary Files Commits Branches @commit @diff @stats
path: root / Additional / rearange.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/rearange.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, 55 insertions, 0 deletions
-rw-r--r--Additional/rearange.cpp55
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<iostream>
+#include"../Seminar04/linked-list-utils.h"
+
+using ListNode = LinkedListNode<int>;
+
+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