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/merge-sorted.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Additional/merge-sorted.cpp (limited to 'Additional/merge-sorted.cpp') diff --git a/Additional/merge-sorted.cpp b/Additional/merge-sorted.cpp new file mode 100644 index 0000000..b801a72 --- /dev/null +++ b/Additional/merge-sorted.cpp @@ -0,0 +1,51 @@ +#include +#include"../Seminar04/linked-list-utils.h" + +using ListNode = LinkedListNode; + +ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) { + if(list1 == nullptr) + return list2; + + if(list2 == nullptr) + return list1; + + ListNode* start = nullptr; + ListNode* iter = nullptr; + + while(list1 != nullptr && list2 != nullptr) { + ListNode*& toInsert = (list1->data > list2->data) ? list2 : list1; + + if(iter == nullptr) { + start = toInsert; + iter = toInsert; + } + else { + iter->next = toInsert; + iter = iter->next; + } + + toInsert = toInsert->next; + } + + ListNode* rest = (list1 == nullptr) ? list2 : list1; + + while(rest != nullptr) { + iter->next = rest; + iter = iter->next; + rest = rest->next; + } + + iter->next = nullptr; + return start; +} + +int main() { + ListNode* l1 = new ListNode(1, new ListNode(2, new ListNode(4))); + ListNode* l2 = new ListNode(1, new ListNode(3, new ListNode(4))); + + ListNode* r = mergeTwoLists(l1, l2); + + printLinkedList(r); + freeList(r); +} \ No newline at end of file -- cgit v1.3.1-23-gd82d