ListNode* MergeSort(ListNode* head)
{
if(head == NULL || head->next == NULL) return head;
ListNode *head1 = head, *head2 = head;
while(head2->next != NULL && head2->next->next != NULL)
{
head1 = head1->next;
head2 = head2->next->next;
}
head2 = head1->next;
head1->next = NULL;
head1 = head;
head1 = MergeSort(head1);
head2 = MergeSort(head2);
//merge
ListNode *guard = new ListNode();
ListNode *cur = guard;
while(head1 != NULL && head2 != NULL)
{
if(head1->val <= head2->val)
{
cur->next = head1;
cur = cur->next;
head1 = head1->next;
}
else
{
cur->next = head2;
cur = cur->next;
head2 = head2->next;
}
}
if(head1 != NULL) cur->next = head1;
if(head2 != NULL) cur->next = head2;
head = guard->next;
delete guard;
return head;
}