leetcode Sort List 对链表进行排序
描述:
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;
}
};
leetcode Sort List 对链表进行排序的更多相关文章
- leetcode:Sort List(一个链表的归并排序)
Sort a linked list in O(n log n) time using constant space complexity. 分析:题目要求时间复杂度为O(nlogn),所以不能用qu ...
- [LeetCode] Sort List 排序 sort
Sort a linked list in O(n log n) time using constant space complexity. Hide Tags Linked List Sort ...
- 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)
跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...
- LeetCode—-Sort List
LeetCode--Sort List Question Sort a linked list in O(n log n) time using constant space complexity. ...
- Sort List 典型链表
https://leetcode.com/problems/sort-list/ Sort a linked list in O(n log n) time using constant space ...
- [leetcode sort]147. Insertion Sort List
Sort a linked list using insertion sort. 利用插入排序对一个链表进行排序 思路和数组中的插入排序一样,不过每次都要从链表头部找一个合适的位置,而不是像数组一样可 ...
- [leetcode]Sort List @ Python
原题地址:http://oj.leetcode.com/problems/sort-list/ 题意:链表的排序.要求:时间复杂度O(nlogn),空间复杂度O(1). 解题思路:由于题目对时间复杂度 ...
- LeetCode初级算法的Python实现--排序和搜索、设计问题、数学及其他
LeetCode初级算法的Python实现--排序和搜索.设计问题.数学及其他 1.排序和搜索 class Solution(object): # 合并两个有序数组 def merge(self, n ...
- LeetCode刷题总结-链表
LeetCode刷题总结-链表 一.链表 链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...
随机推荐
- MiniHook研究
git hub 地址: https://github.com/RaMMicHaeL/minhook
- 20165336 2017-2018-2《Java程序设计》第6周学习总结
20165336 2017-2018-2<Java程序设计>第6周学习总结 教材学习内容总结 常量池中的数据在程序运行期间再也不允许改变. String s = new String(&q ...
- pandas网页操作基础
ipython notebook 命令行输入ipython notebook 此时,浏览器会自动运行并打开ipython网页 基本操作 如上图所示,新建一个项目 导入相关模块,建立一个数据集 制造数据 ...
- insert select带来的问题
当使用 insert...select...进行记录的插入时,如果select的表是innodb类型的,不论insert的表是什么类型的表,都会对select的表的纪录进行锁定.对于那些从oracle ...
- (4.2)mysql备份还原——备份概述
1.什么情况下会用到备份呢? [1.1]灾难恢复 [1.2]单位审计:数据库在过去某一个点是什么样的 [1.3]跨机房灾备:异地备份 [1.4]认为的DDL或者DML语句,导致主从库的数据消失 [1. ...
- RN无限轮播以及ScrollView的大小调节问题
如果你的ScrollView的大小是全屏,height不能用,这种情况需要给ScrollView添加一个容器View,然后调节容器View的大小 无限轮播这里我使用的是一个第三方的插件react-na ...
- shell- 字符串处理 、 扩展的脚本技巧 、 正则表达式
字符串截取的方法 方法一:使用${}表达式 格式:${var:起始位置:长度} 方法二:使用expr substr 格式:expr substr "$var" 起始位置 长度 方法 ...
- ntldr is missing
开机时出现“ntldr is missing,这是因为引导文件丢失了,或者系统找不到引导文件,下面教解决方式. 1.u盘pe启动盘. 2.win03PE2013增强版. 3.pe系统桌面,点击“win ...
- Spark代码中设置appName在client模式和cluster模式中不一样问题
问题 Spark应用名在使用yarn-cluster模式提交时不生效,在使用yarn-client模式提交时生效,如图1所示,第一个应用是使用yarn-client模式提交的,正确显示我们代码里设置的 ...
- sort(排序) qsort(快排) bsearch(二分查找)
sort: 一.对int类型数组排序 int a[100]; int cmp ( int a , int b ) //不必强制转换 { return a < b;//升序排列. } sort ( ...