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