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

leetcode. Sort List

时间:2014-12-06 16:40:11      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   sp   on   div   log   bs   ad   

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

时间复杂度为O(nlbn)的排序一般选择归并排序或快速排序,而且链表的归并不需要重新分配空间,也只需要常量的空间。

一下是链表的归并排序实现:

 1 ListNode *sortList(ListNode *head) 
 2     {
 3         head = merge_sort(head);
 4         return head;
 5     }
 6     
 7     ListNode *merge_sort(ListNode *head)
 8     {
 9         if (head == NULL || head->next == NULL)
10             return head;
11         ListNode *fast = head, *slow = head, *left = head, *right;
12         while (fast != NULL && fast->next != NULL)
13         {
14             fast = fast->next->next;
15             if (fast == NULL)
16                 break;
17             slow = slow->next;
18         }
19         right = slow->next;
20         slow->next = NULL;
21         
22         left = merge_sort(left);
23         right = merge_sort(right);
24         head = merge(left, right);
25         return head;
26     }
27     
28     ListNode *merge(ListNode *l1, ListNode *l2) 
29     {
30          ListNode *dummy1 = new ListNode(INT_MIN), *dummy2 = new ListNode(INT_MIN), *p, *r;
31          dummy1->next = l1;
32          dummy2->next = l2;
33          
34          p = dummy1;
35          while (p->next != NULL && dummy2->next != NULL)
36          {
37              if (p->next->val > dummy2->next->val)
38              {
39                  r = dummy2->next;
40                  dummy2->next = r->next;
41                  r->next = p->next;
42                  p->next = r;
43              }
44              p = p->next;
45          }
46          
47          if (dummy2->next != NULL)
48          {
49              p->next = dummy2->next;
50              dummy2->next = NULL;
51          }
52          
53          p = dummy1->next;
54          delete dummy1;
55          delete dummy2;
56          return p;
57     }

 

leetcode. Sort List

标签:style   blog   color   sp   on   div   log   bs   ad   

原文地址:http://www.cnblogs.com/ym65536/p/4148318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!