Sort List (使用归并排序的链表排序)
Sort a linked list in O(n log n) time using constant space complexity.
C++代码的实现:
#include<iostream>
#include<new>
using namespace std; //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==NULL)
return NULL;
//递归的结束条件,注意,与对数组的归并排序不同
if(head->next==NULL)
return head;
ListNode *p=head;
//q不能从head开始,为什么呢?
ListNode *q=head->next;
ListNode *l2=NULL;
while(q&&q->next)
{
p=p->next;
q=q->next->next;
}
l2=p->next;
p->next=NULL;
return Merge(sortList(head),sortList(l2));
}
ListNode *Merge(ListNode *l1,ListNode *l2)
{
ListNode *pre=l1;
ListNode *p=l1;
ListNode *q=l2;
while(p&&q)
{
if(p->val<=q->val)
{
pre=p;
p=p->next;
continue;
}
else
{
l2=q->next;
q->next=NULL;
q->next=p;
if(p==l1)
l1=q;
else
pre->next=q;
pre=q;
q=l2;
}
}
if(q)
pre->next=q;
return l1;
}
void createList(ListNode *&head)
{
ListNode *p=NULL;
int i=;
int arr[]= {,,,,,,,,,};
for(i=; i<; i++)
{
if(head==NULL)
{
head=new ListNode(arr[i]);
if(head==NULL)
return;
}
else
{
p=new ListNode(arr[i]);
p->next=head;
head=p;
}
}
}
}; int main()
{
Solution s;
ListNode *L=NULL;
s.createList(L);
ListNode *L1=NULL;
L1=s.sortList(L);
while(L1)
{
cout<<L1->val<<" ";
L1=L1->next;
}
}
运行结果:

参考:http://www.tuicool.com/articles/2eemi2
http://www.cnblogs.com/tenosdoit/p/3666585.html
Sort List (使用归并排序的链表排序)的更多相关文章
- 148. Sort List (java 给单链表排序)
题目:Sort a linked list in O(n log n) time using constant space complexity. 分析:给单链表排序,要求时间复杂度是O(nlogn) ...
- insertion sort list (使用插入排序给链表排序)
Sort a linked list using insertion sort. 对于数组的插入排序,可以参看排序算法入门之插入排序(java实现),遍历每个元素,然后相当于把每个元素插入到前面已经排 ...
- [LeetCode] Sort List 链表排序
Sort a linked list in O(n log n) time using constant space complexity. 常见排序方法有很多,插入排序,选择排序,堆排序,快速排序, ...
- [LeetCode] 148. Sort List 链表排序
Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2-> ...
- 给乱序的链表排序 · Sort List, 链表重排reorder list LoLn...
链表排序 · Sort List [抄题]: [思维问题]: [一句话思路]: [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图]: quick ...
- Leetcode:148_Sort List | O(nlogn)链表排序 | Medium
题目:Sort List Sort a linked list in O(n log n) time using constant space complexity 看题目有两个要求:1)时间复杂度为 ...
- C语言 链表的使用(链表的增删查改,链表逆转,链表排序)
//链表的使用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include< ...
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...
- c语言:链表排序, 链表反转
下面将实现链表排序的排序和遍历显示功能: 所定义的链表结构如下: head -> p1 -> p2 ->p3 ->....->pn; head的本身不作为数据节点,hea ...
随机推荐
- JTree用法及JTree使用经验总结
import java.awt.Dimension; import java.awt.Color; import javax.swing.JFrame; import javax.swing. ...
- python challenge 16
前情回顾:上一篇 第16关地址 打开16关,又是一张奇奇怪怪很多点点的图片,应该又是与PIL库有关的. 页面的标题是:let me get this straight.这是英语中的一句俚语,意思是让我 ...
- android 9Path图片的使用
Android UI设计时,经常会使用图片作为背景,比如给按钮设置背景图片时,图片会默认缩放来适应整个按钮.但是有时这种缩放效果并不是我们所需求的.而我们只是希望缩放图片的特定位置,以此来保证按钮的视 ...
- MySQL主从复制详细部署过程
环境介绍: 采用多实例进行主从复制测试,多实例方法请参考网上其它文档,其实多实例和双服务器对于测试环境来说是一样的. 当前采用3306端口进程为Master,3307端口进程为Slave. ...
- TCP/IP-IP
A contented mind is a perpetual feast. "知足长乐" 参考资料:TCP/IP入门经典 (第五版) TCP/IP详解 卷一:协议 一.简介 IP ...
- jqplot配置详解
options = { seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#57 ...
- spring的beans.xml的配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 周赛F题 POJ 1458(最长公共子序列)
F - F Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Description ...
- Spark笔记-treeReduce、reduce、reduceByKey
参考资料: http://stackoverflow.com/questions/32281417/understadning-treereduce-in-spark http://stackover ...
- Matlab 数理统计
1.离散随机分布 超几何分布:M:产品总数;K:次品数;N:抽样数. hygepdf(X, M,K,N):计算超几何分布的密度. 例:hygepdf(1,10,1,3),执行结果为ans=0.3000 ...