码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-02 22:50:24      阅读:191      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!