Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Node* findMin(Node*& head)
- {
- Node* slow = head;
- Node* fast = head->next_node;
- while (fast != nullptr && fast->next_node != nullptr)
- {
- slow = slow->next_node;
- fast = fast->next_node;
- }
- return slow;
- }
- Node* merge(Node* left, Node* right)
- {
- if (left == nullptr)
- {
- return right;
- }
- if (right == nullptr)
- {
- return left;
- }
- Node* ans = new Node(-1,nullptr);
- Node* temp = ans;
- while (left != nullptr && right != nullptr)
- {
- if (left->value < right->value)
- {
- temp->next_node = left;
- temp = left;
- left = left->next_node;
- }
- else
- {
- temp->next_node = right;
- temp = right;
- right = right->next_node;
- }
- }
- while (left != nullptr)
- {
- temp->next_node = left;
- temp = left;
- left = left->next_node;
- }
- while (right != nullptr)
- {
- temp->next_node = right;
- temp = right;
- right = right->next_node;
- }
- ans = ans->next_node;
- return ans;
- }
- Node* mergesort(Node*& head)
- {
- if (head == nullptr || head->next_node == nullptr)
- {
- return head;
- }
- Node* mid = findMin(head);
- Node* left = head;
- Node* right = mid->next_node;
- mid->next_node = nullptr;
- left = mergesort(left);
- right = mergesort(right);
- Node* result = merge(left, right);
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement