sort-list——链表、快慢指针找中间、归并排序
2017-06-07 11:29
477 查看
Sort a linked list in O(n log n) time using constant space complexity.
链表,快慢指针找中点,归并排序。
注意判断条件fast->next!=NULL&&fast->next->next!=NULL,若为fast!=NULL&&fast->next!=NULL则会出现内存溢出
链表,快慢指针找中点,归并排序。
注意判断条件fast->next!=NULL&&fast->next->next!=NULL,若为fast!=NULL&&fast->next!=NULL则会出现内存溢出
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *sortList(ListNode *head) { 12 if(head==NULL || head->next==NULL) 13 return head; 14 ListNode* slow, *fast; 15 slow=head; 16 fast=head; 17 while(fast->next!=NULL&&fast->next->next!=NULL){ 18 slow=slow->next; 19 fast=fast->next->next; 20 } 21 fast=slow; 22 slow=slow->next; 23 fast->next=NULL; 24 fast=sortList(head); 25 slow=sortList(slow); 26 return merge(fast,slow); 27 28 } 29 ListNode *merge(ListNode *left, ListNode *right){ 30 ListNode *res,*temp; 31 if(left==NULL){ 32 res=right; 33 return res; 34 } 35 if(right==NULL){ 36 res=left; 37 return res; 38 } 39 if(left->val<=right->val){ 40 res=left; 41 left=left->next; 42 }else{ 43 res=right; 44 right=right->next; 45 } 46 temp=res; 47 while(left!=NULL&&right!=NULL){ 48 if(left->val<=right->val){ 49 temp->next=left; 50 left=left->next; 51 }else{ 52 temp->next=right; 53 right=right->next; 54 } 55 temp=temp->next; 56 57 } 58 if(left!=NULL){ 59 temp->next=left; 60 } 61 if(right!=NULL){ 62 temp->next=right; 63 } 64 return res; 65 } 66 };
相关文章推荐
- 148. Sort List(链表的归并排序,用快慢指针来partition)
- 148. Sort List 链表归并排序
- 148. Sort List--单链表自底向上归并排序
- leetcode_效率题解_148. Sort List_(链表归并排序)
- leetCode刷题Reorder_list (快速求出链表的中间结点——快慢指针方法)
- 链表的归并排序 特殊优化, merge sort for list,非快慢指针法
- 链表的二路归并排序 Sort List
- leetcode 148. Sort List 链表 归并排序 和 快排
- leetcode 148. Sort List 链表归并排序
- [leetcode] 134 Sort List (链表 & 归并排序)
- Sort List——经典(链表中的归并排序)
- LeetCode Sort List 链表的归并排序
- Leetcode Sort List 链表归并排序
- 【LeetCode】Sort List 解题报告(对链表进行归并排序)
- leetcode:Sort List(链表的归并排序)
- [C++]LeetCode: 125 Sort List (归并排序链表)
- leetcode:Sort List(一个链表的归并排序)
- 【链表】Sort List(归并排序)
- Sort List (使用归并排序的链表排序)
- 链表排序Sort_List(归并)