diff --git a/9 September Assign Mice Holes b/9 September Assign Mice Holes new file mode 100644 index 0000000..a179d86 --- /dev/null +++ b/9 September Assign Mice Holes @@ -0,0 +1,51 @@ +class Solution { +public: + // Function to merge two sorted linked lists + Node* merge(Node* left, Node* right) { + if (!left) return right; + if (!right) return left; + + Node* result = nullptr; + + if (left->data <= right->data) { + result = left; + result->next = merge(left->next, right); + } else { + result = right; + result->next = merge(left, right->next); + } + return result; + } + + // Function to find the middle of the linked list + Node* getMiddle(Node* head) { + if (!head) return head; + + Node* slow = head; + Node* fast = head->next; + + while (fast && fast->next) { + slow = slow->next; + fast = fast->next->next; + } + + return slow; + } + + // Main function to implement merge sort + Node* mergeSort(Node* head) { + if (!head || !head->next) return head; + + // Find the middle of the linked list + Node* middle = getMiddle(head); + Node* nextOfMiddle = middle->next; + middle->next = nullptr; // Split into two halves + + // Recursively sort both halves + Node* left = mergeSort(head); + Node* right = mergeSort(nextOfMiddle); + + // Merge the two sorted halves + return merge(left, right); + } +};