首页 > 其他 > 详细

Sort a linked list in O(n log n) time using constant space complexity.

时间:2016-04-02 22:47:11      阅读:412      评论:0      收藏:0      [点我收藏+]
 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!