From e3e4571e850f2bdd480152ec46257c5d839c83e7 Mon Sep 17 00:00:00 2001 From: chayan das Date: Tue, 9 Sep 2025 00:16:35 +0530 Subject: [PATCH] Create 9 September Assign Mice Holes --- 9 September Assign Mice Holes | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 9 September Assign Mice Holes 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); + } +};