描述:

Sort a linked list in O(n log n) time using constant space complexity.

在O(n*log(n))的时间复杂度,常数级空间复杂度内对一个链表进行排序

采用归并排序,用快慢指针将链表分成两部分,最后合并两个链表.

  1. /**
  2. * Definition for singly-linked list.
  3. * struct ListNode {
  4. * int val;
  5. * ListNode *next;
  6. * ListNode(int x) : val(x), next(NULL) {}
  7. * };
  8. */
  9. class Solution {
  10. public:
  11. ListNode* sortList(ListNode* head) {
  12. if(!head || !head->next) return head;
  13. ListNode * p = head;
  14. ListNode * q = head->next;
  15. //二分
  16. while(q && q->next){
  17. p = p->next;
  18. q = q->next->next;
  19. }
  20. ListNode * right = sortList(p->next); //对后半段递归排序
  21. p->next = NULL; //把前后两段分开
  22. ListNode * left = sortList(head);
  23. //合并前后两段,实际上是用这里的判断大小来排序
  24. return merge(left, right);
  25. }
  26. // 合并函数
  27. ListNode *merge(ListNode *l, ListNode *r){
  28. ListNode res(0);
  29. ListNode * p = &res;
  30. //按增序合并l和r
  31. while(l && r){
  32. if(l->val < r->val){
  33. p->next = l;
  34. l = l->next;
  35. }else{
  36. p->next = r;
  37. r = r->next;
  38. }
  39. p = p->next;
  40. }
  41. if(l) p->next = l;
  42. if(r) p->next = r;
  43. return res.next;
  44. }
  45. };

leetcode Sort List 对链表进行排序的更多相关文章

  1. leetcode:Sort List(一个链表的归并排序)

    Sort a linked list in O(n log n) time using constant space complexity. 分析:题目要求时间复杂度为O(nlogn),所以不能用qu ...

  2. [LeetCode] Sort List 排序 sort

    Sort a linked list in O(n log n) time using constant space complexity. Hide Tags Linked List Sort   ...

  3. 跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort)

    跳跃空间(链表)排序 选择排序(selection sort),插入排序(insertion sort) 选择排序(selection sort) 算法原理:有一筐苹果,先挑出最大的一个放在最后,然后 ...

  4. LeetCode—-Sort List

    LeetCode--Sort List Question Sort a linked list in O(n log n) time using constant space complexity. ...

  5. Sort List 典型链表

    https://leetcode.com/problems/sort-list/ Sort a linked list in O(n log n) time using constant space ...

  6. [leetcode sort]147. Insertion Sort List

    Sort a linked list using insertion sort. 利用插入排序对一个链表进行排序 思路和数组中的插入排序一样,不过每次都要从链表头部找一个合适的位置,而不是像数组一样可 ...

  7. [leetcode]Sort List @ Python

    原题地址:http://oj.leetcode.com/problems/sort-list/ 题意:链表的排序.要求:时间复杂度O(nlogn),空间复杂度O(1). 解题思路:由于题目对时间复杂度 ...

  8. LeetCode初级算法的Python实现--排序和搜索、设计问题、数学及其他

    LeetCode初级算法的Python实现--排序和搜索.设计问题.数学及其他 1.排序和搜索 class Solution(object): # 合并两个有序数组 def merge(self, n ...

  9. LeetCode刷题总结-链表

    LeetCode刷题总结-链表 一.链表     链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...

随机推荐

  1. wpf之WrapPanel与StackPanel

    WrapPanel: WrapPanel布局面板将各个控件从左至右按照行或列的顺序罗列,当长度或高度不够是就会自动调整进行换行.他有三个属性 Orientation——根据内容自动换行,ItemHei ...

  2. wpf中的数据模板

    wpf中的模板分为数据模板和控件模板,我们可以通过我们自己定制的数据模板来制定自己想要的数据表现形式.例如:时间的显示可以通过图片,也可以通过简单数字表现出来. 例如: (1)先在Demo这个命名空间 ...

  3. iOS更换科大讯飞的key

    我这个APP使用了科大讯飞的"语音评测"功能,之前使用的是我自己注册的科大讯飞账号,在这个账号里面创建的APP,生成的key. 我们公司有公司的key, 同事说可以多个APP公用一 ...

  4. ubuntu物理机上搭建Kubernetes集群 -- 准备

    准备工作 1.kubernetes架构 2.三台ubuntu主机: 操作系统:ubuntu-16.04.1-server-amd64 docker: 1.安装 使用命令 sudo apt-get in ...

  5. 《Linux 文本处理》- awk 分析 nginx 日志

    废话不多说,简单了解一下 awk - 强大的文本分析工具,也就是分析日志 最常用的就是分析日志了吧,做统计什么,这里也拿 nginx 日志来做分析 1:统计出现次数 - 比如状态码出现次数 - 先直接 ...

  6. ES6新特性三: Generator(生成器)函数详解

    本文实例讲述了ES6新特性三: Generator(生成器)函数.分享给大家供大家参考,具体如下: 1. 简介 ① 理解:可以把它理解成一个函数的内部状态的遍历器,每调用一次,函数的内部状态发生一次改 ...

  7. rem设置

    html{ font-size:10vw; }

  8. pymysql 模块 使用目录

    mysql python pymysql模块 基本使用 mysql python pymysql模块 增删改查 插入数据 介绍 commit() execute() executemany() 函数 ...

  9. 如何在Digital Ocean上申请服务器的教程

    本文会详细叙述如何在digital ocean上注册.申请.创建以及配置服务器,亲测有效. what's the Digital Ocean ? 根据度娘释义,Digital Ocean是digita ...

  10. pycharm的小问题之光标

    一大早起来,突然发现pycharm的光变粗,按退格键会删除编写的内容,超级难受(如下图), 百度一下,也不知道在百度框里输什么关键字好,但最后还是找到了,哈哈.... ​ 解决方法: 1.按键盘上In ...