链接:https://oj.leetcode.com/problems/sort-list/
描述:
Sort a linked list in O(n log n) time using constant space complexity.
O(nlogn) 可以考虑到哪些排序算法:归并排序,堆排序。考虑使用归并排序实现。
ListNode* sortList(ListNode *head)
{
if( head == NULL) return head;
if( head->next == NULL) return head;
ListNode dumy(-1);
dumy.next = head;
ListNode *first = &dumy;
ListNode *second = &dumy;
while(first->next != NULL &&
first->next->next != NULL)
{
second = second->next;
first = first->next->next;
}
ListNode *pre = second;
second = pre->next;
pre->next = NULL;
first = sortList(head);
second = sortList(second);
ListNode *p = &dumy;
while( first != NULL || second != NULL)
{
const int value1 = first != NULL ? first->val : INT_MAX;
const int value2 = second != NULL ? second->val : INT_MAX;
if( value1 > value2){
p->next = second;
second = second->next;
}else {
p->next = first;
first = first->next;
}
p = p->next;
}
return dumy.next;
}