class Solution {
public:
ListNode* sortList(ListNode* head) {
if(head == NULL || head->next ==NULL)
{
return head;
}
ListNode* slow = head;
ListNode* fast = head;
while(fast->next && fast->next->next)
{
fast = fast->next->next;
slow = slow->next;
}
ListNode* mid = slow->next;
slow->next = NULL;
ListNode* left = sortList(head);
ListNode* right = sortList(mid);
return mergeList(left, right);
}
ListNode* mergeList(ListNode* head, ListNode* mid)
{
ListNode* p = new ListNode(0);
ListNode* p1 = p;
while(head && mid)
{
if(head->val < mid->val)
{
p1->next = head;
head = head->next;
}
else
{
p1->next = mid;
mid = mid->next;
}
p1 = p1->next;
}
if(head)
{
p1->next = head;
}
else if(mid)
{
p1->next = mid;
}
return p->next;
}
};