题意:给出一个单链表,将其排序,要求时间复杂度O(nlgn)

思路:用归并排序,取链表的一半,在取一半时,不用先计算总结点个数,一个每次走两步,一个每次走一步,当走的快的结束是,慢的已经到总结点的一半了

代码如下:

class Solution
{private ListNode mergeListNode(ListNode l1, ListNode l2){if (null == l1) return l2;else if (null == l2) return l1;ListNode p1 = l1, p2 = l2;ListNode ans = null, tail = null;while (l1 != null && l2 != null){if (l1.val < l2.val){if (tail == null){ans = tail = l1;}else{tail.next = l1;tail = tail.next;}l1 = l1.next;}else{if (null == tail){ans = tail = l2;}else{tail.next = l2;tail = tail.next;}l2 = l2.next;}}if (l1 != null) tail.next = l1;else if (l2 != null) tail.next = l2;return ans;}public ListNode sortList(ListNode head){if (null == head || null == head.next) return head;ListNode fast = head.next, slow = head;while (fast != null && fast.next != null){fast = fast.next.next;slow = slow.next;}ListNode p = slow.next;slow.next = null;return mergeListNode(sortList(head), sortList(p));}
}

LeetCode Sort List(单链表归并排序)相关推荐

  1. LeetCode Insertion Sort List(单链表插入排序)

    题意:给出一个未排序好的单链表,用插入排序来实现排序 代码如下: class Solution {public ListNode insertionSortList(ListNode head){if ...

  2. LeetCode 369. 给单链表加一(递归)

    文章目录 1. 题目 2. 解题 1. 题目 用一个 非空 单链表来表示一个非负整数,然后将这个整数加一. 你可以假设这个整数除了 0 本身,没有任何前导的 0. 这个整数的各个数位按照 高位在链表头 ...

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

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

  4. 数据结构--链表--单链表归并排序mergesort

    思路: 1.将链表的中点找到,对其切分成2条 2.继续步骤1,切成4条,8条...,直至每段链表只有1个元素 3.归并操作,对两两链表进行合并排序,并返回回并后的链表的头结点,依次向上递归回去 C++ ...

  5. 十、分享一道LeetCode较为简单的单链表题,但是却能激发起练习算法的极大的兴趣

    实现一种算法,找出单向链表中倒数第 k 个节点.返回该节点的值 1.今天在LeetCode练习一道单链表的题(题目如上),虽然不难,但是却极大的触动了我学习算法的兴趣.因为当你看到大神的解法时,你真的 ...

  6. 单链表的应用--对单链表排序

      对单链表进行排序,利用前文写好的链表的框架,在链表类中补充Sort方法. 对单链表排序 一.问题分析 二.代码分析 1.链表类LinkList 2.链表方法Sort 三.测试代码 1.主函数 2. ...

  7. 【LeetCode】 sort list 单清单归并

    称号:Sort a linked list in O(n log n) time using constant space complexity. 思路:要求时间复杂度O(nlogn) 知识点:归并排 ...

  8. 单链表的归并排序(C语言)

    //数据域val,指针域nextstruct ListNode{int val;struct ListNode* next; }; //创建单链表struct ListNode* CreatList( ...

  9. 单链表排序----快排 归并排序

    单链表排序----快排 & 归并排序 原文:http://blog.csdn.net/u012658346/article/details/51141288 题目描述:  给定一个乱序的单链表 ...

最新文章

  1. C++ 在派生类中使用using声明改变基类成员的可访问性
  2. Python自学真的可以学好嘛?
  3. python 编译器_Python教程:编译器与解释器
  4. 赫伯特·西蒙前半生泡妞打架,后半生拿图灵奖、诺贝尔奖,成人工智能大神
  5. Pytho爬虫-4567电影网电影信息爬取
  6. 深信服虚拟机服务器功率,深信服VDI基准测试:让服务器资源最大化使用
  7. 书籍_《未来世界的幸存者》阮一峰--2/5
  8. OLED屏幕的IIC驱动程序
  9. vue-父子组件传参以及无限级评论
  10. 新同事上来就优化了一遍MySQL索引和查询,老板人傻了。。。
  11. 【C++】之内联函数(inline)
  12. 查询数据库中的重复数据记录
  13. Study JavaScript《JS操作SVG的一些知识》
  14. OracleDBA系列之--(二)创建数据库
  15. 小金额的样品费,大家都是用什么收款呢?
  16. 如何使VM虚拟机和VB虚拟机中的电脑连通并处在同一网段,桥接和NAT的区别浅析
  17. javascript时间戳转日期格式以及浏览器时区问题解决
  18. 0代码、不编程—交互式网页设计工具VXPLO
  19. 全国计算机软件考试用书目录
  20. BBS灌水机脚本(vb scritp, telnet, bbs, sterm)

热门文章

  1. ecshop的商品列表输出中多出一条空记录
  2. 收购创业公司如何评估价值
  3. 增强.net开发的5个非常有用的Visual Studio 2012扩展
  4. python语法基础学习-Python基础语法精心总结!看完都知道的可以往下继续学习了...
  5. python画图代码turtle-介绍下Python里自带的一个有趣画图模块库:Turtle库
  6. vscode使用教程python-用 VSCode 编写 python
  7. python怎么画简单图片-初学Python-简单的在图片上加文字
  8. 软件工程python就业方向-月薪2万+的Python Web岗,学到什么程度能找到工作?
  9. 十大python开发软件-2017年最棒的七个Python图形应用GUI开发框架
  10. python.freelycode.com-Python数据可视化2018:为什么这么多的库?