标签:
1 利用归并的方法进行排序 2 完成两个主要功能即可:拆分和合并 3 拆分用到了比较好的方法就是利用快慢指针进行,每次找到链表的中间部分进行拆解 4 合并可以利用两种方式:一种是非递归的方法另一种是递归的方法,都是可以做的 5 个人比较喜欢递归的方法,理解起来比较简单 6 /** 7 * Definition for singly-linked list. 8 * struct ListNode { 9 * int val; 10 * ListNode *next; 11 * ListNode(int x) : val(x), next(NULL) {} 12 * }; 13 */ 14 class Solution { 15 public: 16 ListNode* MergeList(ListNode * list1, ListNode* list2) 17 { 18 if(list1 == NULL) 19 return list2; 20 if(list2 == NULL) 21 return list1; 22 ListNode * phead = NULL; 23 if(list1->val < list2->val) 24 { 25 phead = list1; 26 phead->next = MergeList(list1->next,list2); 27 } 28 else 29 { 30 phead = list2; 31 phead->next = MergeList(list2->next, list1); 32 } 33 return phead; 34 } 35 36 ListNode *sortList(ListNode *head) { 37 if(head == NULL || head->next == NULL) return head; 38 ListNode* slow = head; 39 ListNode* fast = head->next; 40 while(fast && fast->next) 41 { 42 fast = fast->next->next; 43 slow = slow->next; 44 } 45 ListNode * headb = slow->next; 46 slow->next = NULL; 47 return MergeList(sortList(head), sortList(headb)); 48 } 49 };
Sort a linked list in O(n log n) time using constant space complexity.
标签:
原文地址:http://www.cnblogs.com/aganlengzi/p/5348393.html