LeetCode148:Sort List
题目:
Sort a linked list in O(n log n) time using constant space complexity.
解题思路:
根据题目要求,可知只能用归并排序,其他排序算法要么时间复杂度不满足,要么空间复杂度不满足
实现代码:
#include <iostream> using namespace std;
/*
Sort a linked list in O(n log n) time using constant space complexity.
*/
/**
* 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)
{ } }; void addNode(ListNode* &head, int val)
{
ListNode *newNode = new ListNode(val);
if(head == NULL)
{
head = newNode;
}
else
{
newNode->next = head;
head = newNode;
}
} void PrintList(ListNode *root)
{
ListNode *head = root;
while(head != NULL)
{
cout<<head->val<<"\t";
head = head->next;
}
cout<<endl;
} class Solution {
public:
ListNode *sortList(ListNode *head) {
if(head == NULL || head->next == NULL)
return head;
ListNode *quick = head;
ListNode *slow = head;
while(quick->next && quick->next->next)//通过两个指针,一个走两步、一个走一步,获得链表的中间节点
{
slow = slow->next;
quick = quick->next->next;
}
quick = slow;
slow = slow->next;
quick->next = NULL;//将链表的前半段进行截断
ListNode *head1 = sortList(head);
ListNode *head2 = sortList(slow);
return merge(head1, head2);
} //归并两个有序链表
ListNode *merge(ListNode *head1, ListNode *head2)
{
if(head1 == NULL)
return head2;
if(head2 == NULL)
return head1;
ListNode *newHead = NULL;
if(head1->val < head2->val)
{
newHead = head1;
head1 = head1->next; }
else
{
newHead = head2;
head2 = head2->next;
}
ListNode *p = newHead;
while(head1 && head2)
{
if(head1->val < head2->val)
{
p->next = head1;
head1 = head1->next;
}
else
{
p->next = head2;
head2 = head2->next;
}
p = p->next;
}
if(head1)
p->next = head1;
if(head2)
p->next = head2;
return newHead;
}
}; int main(void)
{
ListNode *head = new ListNode();
addNode(head, );
addNode(head, );
addNode(head, );
PrintList(head); Solution solution;
head = solution.sortList(head);
PrintList(head); return ;
}
LeetCode148:Sort List的更多相关文章
- LeetCode:Sort List
Title: Sort a linked list in O(n log n) time using constant space complexity. 思路:考虑快速排序和归并排序,但是我的快速排 ...
- linux命令学习之:sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出.sort命令既可以从特定的文件,也可以从stdin中获取输入. 语法 sort (选项) (参数) 选项 sort将文 ...
- JavaScript:sort() 方法
ylbtech-JavaScript:sort() 方法 JavaScript sort() 方法 1. 定义和用法返回顶部 sort() 方法用于对数组的元素进行排序. 语法 arrayObject ...
- 总结: Sort 排序算法
排序总结 面试经验 硅谷某前沿小Startup面试时,问到的一个题目就是写一个快速排序算法.进而面试官问到了各种算法的算法复杂度,进而又问了Merge Sort 与 QuickSort 的优劣. 对排 ...
- Python排列函数:sort、sorted
排序函数介绍:sort()和sorted()都属于Python list的排序方法 区别:sort()属于永久性排列,直接改变该list: sorted属于暂时性排列,会产生一个新的序列. #sort ...
- linux常用命令:sort 命令
sort 命令是Linux系统下一种对文件排序的工具,sort 命令功能十分强大,是 Shell 脚本编程是常用的文件排序工具. 1.命令格式: sort [选项]... [文件]... 或:sort ...
- R语言学习笔记:sort、rank、order、arrange排序函数
R语言中排序有几个基本函数:sort().rank().order().arrange() 一.总结 sort()函数是对向量进行从小到大的排序 rank()函数返回的是对向量中每个数值对应的秩 or ...
- Linux命令(24) :sort
转载地址:点击 linux 命令详解 sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比 ...
- Python开发【笔记】:sort排序大法
浅谈排序 程序中经常用到排序函数,Python 提供了 sort 和 sorted 函数,一个原地排序,一个返回排序后的新结果 1.参数 函数原型: sort([cmp[, key[, reverse ...
随机推荐
- 关于HSTS安全协议的全面详细解析
HTTP 严格传输安全(HSTS)是一种安全功能,web 服务器通过它来告诉浏览器仅用 HTTPS 来与之通讯,而不是使用 HTTP.HSTS是网站从HTTP到HTTPS中网站性能及安全优化非常重要的 ...
- 64位windows+32位JDK8+32位eclipse是可以的
- SpringBoot中使用消息中间件Kafka实现Websocket的集群
1.在实际项目中,由于数据量的增大及并发数的增多,我们不可能只用一台Websocket服务,这个时候就需要用到Webscoket的集群.但是Websocket集群会遇到一些问题.首先我们肯定会想到直接 ...
- SSH框架整合过程总结
---------------------siwuxie095 SSH 框架整合过程总结 (一)导入相关 jar 包(共 ...
- HttpClient实战二:单线程和多线程连接池实例
为什么使用HTTP连接池? 随着系统架构风格逐渐向前后端分离架构,微服务架构转变,RestFul风格API的开发与设计,同时SpringMVC也很好的支持了REST风格接口.各个系统之间服务的调用大多 ...
- nginx安装及基础配置(含jdk安装及配置)
0.jdk安装配置 #下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-7u25-linux-x64.tar.gz tar -xzf jdk-7u25-linux-x64.tar.gz m ...
- nginx反向代理部署与演示(二)
我们把LB01作为负载均衡器,WEB01和WEB02作为两台web服务器. WEB01与WEB02虚拟主机配置如下: 我们修改nginx下的conf/nginx.conf文件,在http{}中 ...
- jdk8 jvm配置参数说明
这些选项是特定于Java HotSpot虚拟机的通用选项.-X 显示所有可用-X选项的帮助. -Xbatch 禁用后台编译.默认情况下,JVM将该方法编译为后台任务,以解释器模式运行该方法,直到后台编 ...
- Judy Array - Example
“ In computer science and software engineering, a Judy array is a data structure that has high perfo ...
- PAT 1057 数零壹 (20)(代码+思路)
1057 数零壹(20 分) 给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二 ...