leetcode_SortList
来源:互联网 发布:软件锁哪个好 编辑:程序博客网 时间:2024/06/06 06:57
描述:
Sort a linked list in O(n log n) time using constant space complexity.
在O(n*log(n))的时间复杂度,常数级空间复杂度内对一个链表进行排序
采用归并排序,用快慢指针将链表分成两部分,最后合并两个链表.
/** * 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 * p = head; ListNode * q = head->next; //二分 while(q && q->next){ p = p->next; q = q->next->next; } ListNode * right = sortList(p->next); //对后半段递归排序 p->next = NULL; //把前后两段分开 ListNode * left = sortList(head); //合并前后两段,实际上是用这里的判断大小来排序 return merge(left, right); } // 合并函数 ListNode *merge(ListNode *l, ListNode *r){ ListNode res(0); ListNode * p = &res; //按增序合并l和r while(l && r){ if(l->val < r->val){ p->next = l; l = l->next; }else{ p->next = r; r = r->next; } p = p->next; } if(l) p->next = l; if(r) p->next = r; return res.next; }};
阅读全文
0 0
- leetcode_SortList
- 适用于小型项目的 Android MVP 架构
- 数据库——MySQL如何查看table(表)占用空间的大小
- skynet任务调度分析
- PackageUtils
- LXR_CHNGroup自定义分组与系统通讯录分组
- leetcode_SortList
- Unity手游制作记-制作通用输入管理器
- 错误解决: java.lang.SecurityException: Permission Denial
- 打开第三方应用
- ASP.net常用代码(持续更新)
- JAVA企业面试题精选 数据库11-20
- Unity手游制作记-通用输入管理器-测试案例
- HenCoder Android开发进阶系列学习笔记
- Spring-基于注解的配置[03Bean作用范围和生命周期方法]