排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
没有常数级空间复杂度,归并的想法。
class Solution {
public:
ListNode* mergesort(ListNode* head1 , ListNode* head2){
if(head1 == NULL){
return head2;
}
else if(head2 == NULL){
return head1;
}
else{
if(head1->val < head2->val){
head1->next = mergesort(head1->next,head2);
return head1;
}
else{
head2->next = mergesort(head2->next,head1);
return head2;
}
}
}
ListNode* sortList(ListNode* head)
{
if(!head || !head->next){
return head;
}
ListNode *fast = head;
ListNode *slow = head;
ListNode *pre = head;
while(fast && fast->next){
pre = slow;
slow = slow->next;
fast = fast->next->next;
}
pre->next = NULL;
return mergesort(sortList(head),sortList(slow));
}
};