leetcode || sortlist
来源:互联网 发布:侠客风云传优化 编辑:程序博客网 时间:2024/06/06 07:04
题目:sort a linked list in O(n log n) time using constant space complexity
思路:
O(nlogn)实现链表排序,选择余地之后快速、合并、以及堆排序。 堆的空间是O(n),因此只有前两种是可以考虑的。
这道题目采用快速排序会TLE,合并排序就不会,应该是快排的交换次数太多。
#include <iostream>#include <vector>using namespace std;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ struct ListNode { int val; ListNode *next; ListNode(int x) :val(x),next(NULL){} };class Solution {public: ListNode *sortList(ListNode *head) { quick_sort(head,NULL); } void myswap(ListNode*s,ListNode*r) { int val = s->val; s->val = r->val; r->val = val; } void quick_sort(ListNode*start,ListNode*end) { if(start == end) return; if(start->next == end) return; int key = start->val; ListNode *p = start; ListNode *q = start->next; while (q != end) { if(q->val > key) { myswap(p,q); p = p->next; } q = q->next; } quick_sort(start,p); quick_sort(p->next,end); } ListNode* lmerge_sort(ListNode*start) { if(start == NULL || start->next == NULL) { return start; } ListNode *p = start; ListNode *q = start; ListNode *pre = NULL; while (q != NULL && q->next != NULL) { q = q->next->next; pre = p; p = p->next; } pre->next = NULL; ListNode*head1 = lmerge_sort(start); ListNode *head2 = lmerge_sort(p); return lmerge(head1,head2); } ListNode* lmerge(ListNode*head1,ListNode*head2) { ListNode *head; ListNode *p; if(head1 == NULL) { return head2; } if(head2 == NULL) { return head1; } if(head1->val < head2->val) { head = head1; head1 = head1->next; } else { head = head2; head2 = head2->next; } p = head; while (head1 != NULL &&head2 != NULL) { if(head1->val < head2->val) { p->next = head1; head1= head1->next; } else { p->next = head2; head2= head2->next; } p = p->next; } if(head1 != NULL) { p->next = head1; } if(head2 != NULL) { p->next = head2; } return head; }};int main (){}
0 0
- leetcode || sortlist
- leetcode--SortList
- leetcode---SortList
- leetcode题目解答---- SortList
- leetcode 148 sortList
- Leetcode 148 SortList
- leetcode 148 sortlist
- SortList
- SortList
- SortList
- LeetCode 148: SortList, 206:Reverse linked list
- sortlist.c
- Insert SortList
- 刷题——SortList
- SortList 单链表排序 要求复杂度O(NlgN)
- ASP.net 中Queue,Stack,Hashtable,Sortlist一些简单用法
- SortList非泛型和泛型遍历输出形式
- sortList and Lowest Common Ancestor of a Binary Search Tree
- 使用OpenEntityManagerInViewInterceptor后的影响
- 骨文
- 祭灵
- NYOJ-260 数数小木块
- Java中的匿名内部类
- leetcode || sortlist
- [LeetCode] Word Search [37]
- XTU1215 因子和
- android考试系统
- Android研究院之ListView原理学习与优化总结(二十一)
- POJ 1273Drainage Ditches(网络流之最大流)
- 正则表达式
- 因子和
- swift初探(供objective c开发者参考)