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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sort a linked list in O(n log n) time using constant space complexity.相关的知识,希望对你有一定的参考价值。

 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.的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 148. Sort List 归并排序 in Java

Partition List; Linked List; Pointer;

[Algorithm] 1290. Convert Binary Number in a Linked List to Integer

148. Sort List

leetcode1669. Merge In Between Linked Lists

LeetCode 234 Palindrome Linked List(回文链表)(*)(?)