148. Sort List
2017-11-04 14:19
155 查看
这道题要求给链表排序,时间为O(nlogn),并且使用的空间为常量。
根据时间复杂度,符合要求有快速排序,归并排序,堆排序。这里用归并排序:
首先用快慢指针把链表分成前后两段,并且把这两段切开,递归,不能分割了就merge
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* sortList(ListNode* head) { if(!head || !head->next) return head; ListNode* slow = head, *fast = head, *pre = head; while(fast && fast->next){ pre = slow; fast = fast->next->next; slow = slow->next; } pre->next = NULL; return merge(sortList(head), sortList(slow)); } ListNode* merge(ListNode* l1, ListNode* l2){ ListNode* dummy = new ListNode(-1); ListNode* cur = dummy; while(l1 && l2){ if(l1->val < l2->val){ cur->next = l1; l1 = l1->next; }else{ cur->next = l2; l2 = l2->next; } cur = cur->next; } if(l1) cur->next = l1; if(l2) cur->next = l2; return dummy->next; } };
相关文章推荐
- 148. Sort List
- [leetcode] 148.Sort List
- 【C++】【LeetCode】148. Sort List
- 148. Sort List
- 148. Sort List--单链表自底向上归并排序
- 148. Sort List (归并) 和147. Insertion Sort List
- 148. Sort List
- 148. Sort List
- 148. Sort List
- 148. Sort List
- 148. Sort List
- 148. Sort List
- Middle-题目97:148. Sort List
- 148. Sort List 链表排序(C++)
- 【Leet Code】148. Sort List---Medium
- 148. Sort List
- 148. Sort List (java 给单链表排序)
- 148. Sort List(重要)
- leetcode 148. Sort List 解题报告
- [leetcode] 【排序】 148. Sort List