题目
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
为了完成时间复杂度的要求,使用归并排序是一个很好的技巧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
class Solution { public: ListNode* megresortList(ListNode* left,ListNode *right) { if(left==NULL) return right; if(right==NULL) return left; if(left->val <= right->val){ left->next=megresortList(left->next,right); return left; } else{ right->next=megresortList(right->next,left); return right; } } ListNode* sortList(ListNode* head) { if(head==NULL || head->next==NULL) return head; ListNode* p1=head; ListNode* p2=head->next; while(p2!=NULL) { p2=p2->next; if(p2==NULL) break; p2=p2->next; p1=p1->next; } p2=p1->next; p1->next=NULL; p1=head; p1=sortList(p1); p2=sortList(p2); p1=megresortList(p1,p2); return p1; } };
|