1.题目描述:

2.解题思路:

  本题是要堆一个链表进行排序,并且要求时间复杂度为 O(n log n)。很明显,要用到分治的思想,用二分法进行归并排序:找到链表的middle节点,然后递归对前半部分和后半部分分别进行归并排序,最后对两个已排好序的链表进行Merge。

  分为三步:

  (1)找到中间结点,将链表分割成两部分。这里用到快慢两个指针的方法。

  (2)对前后每一部分分别进行归并排序。这里用到递归。

  (3)对两个已排好序的链表进行合并。这里用到前面merge 2 list的方法。

  

3.Java代码:

  1. //public class LeetCode148 为测试代码
  2. public class LeetCode148 {
  3. public static void main(String[] args) {
  4. ListNode n1=new ListNode(3),n2=new ListNode(2),n3=new ListNode(1),n4=new ListNode(5);
  5. ListNode p=n1;
  6. n1.next=n2;
  7. n2.next=n3;
  8. n3.next=n4;
  9. System.out.print("初始时链表:"+p.val);
  10. while(p.next!=null){
  11. System.out.print("->"+p.next.val);
  12. p=p.next;
  13. }
  14. System.out.println();
  15. ListNode head=new Solution().sortList(n1);
  16. System.out.print("排序后链表:"+head.val);
  17. while(head.next!=null){
  18. System.out.print("->"+head.next.val);
  19. head=head.next;
  20. }
  21. }
  22. }
  23.  
  24. //class Solution为ac代码
  25. class Solution {
  26. public ListNode sortList(ListNode head) {
  27. if(head==null||head.next==null) return head;
  28. // step 1. 将链表分割为两部分
  29. ListNode pre=null,slow=head,fast=head;
  30. while(fast!=null&&fast.next!=null){
  31. pre=slow;//pre指针是为了记住slow的前一个节点位置
  32. slow=slow.next;
  33. fast=fast.next.next;
  34. }
  35. pre.next=null;//将链表从pre和slow之间断开
  36. // step 2. 对每一部分进行排序
  37. ListNode l1=sortList(head);
  38. ListNode l2=sortList(slow);
  39. // step 3. merge l1 and l2
  40. return merge2Lists(l1,l2);
  41. }
  42.  
  43. private ListNode merge2Lists(ListNode l1, ListNode l2) {
  44. ListNode fakeHead=new ListNode(0);
  45. ListNode p=fakeHead;
  46. while(l1!=null&&l2!=null){
  47. if(l1.val<l2.val){
  48. p.next=l1;
  49. l1=l1.next;
  50. }else{
  51. p.next=l2;
  52. l2=l2.next;
  53. }
  54. p=p.next;
  55. }
  56. if(l1!=null) p.next=l1;
  57. if(l2!=null) p.next=l2;
  58. return fakeHead.next;
  59. }
  60. }
  61. class ListNode{
  62. int val;
  63. ListNode next;
  64. ListNode(int x) { val = x; }
  65. }

测试结果:

思考:我将merge2Lists方法写成递归的写法时,即

  1. private ListNode merge2Lists(ListNode l1, ListNode l2) {
  2. if(l1==null) return l2;
  3. if(l2==null) return l1;
  4. if(l1.val<l2.val){
  5. l1.next=merge2Lists(l1.next, l2);
  6. return l1;
  7. }else{
  8. l2.next=merge2Lists(l1, l2.next);
  9. return l2;
  10. }
  11. }

这时在eclipse上测试完全没问题,但是在LeetCode上提交不通过,至今没想明白说明问题,如果哪位大神明白为什么,一定告诉我。。。

【LeetCode148】Sort List★★bug的更多相关文章

  1. 【LeetCode】Sort Colors 解题报告

    [题目] Given an array with n objects colored red, white or blue, sort them so that objects of the same ...

  2. 【LeetCode】Sort Colors

    Sort Colors Given an array with n objects colored red, white or blue, sort them so that objects of t ...

  3. 【leetcode】Sort Colors(middle)☆

    Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...

  4. 【leetcode】Sort List (middle)

    Sort a linked list in O(n log n) time using constant space complexity. 思路: 用归并排序.设输入链表为S,则先将其拆分为前半部分 ...

  5. 【leetcode】Sort List

    Sort List Sort a linked list in O(n log n) time using constant space complexity.   需要采用归并排序对链表进行操作. ...

  6. 【shell】sort命令

    [root@andon ~]# sort 1 ##常用正序自动排序 101 paul 18 100 102 suan 11 99 103 peter 18 98 id name age score [ ...

  7. 【Leetcode】Sort List JAVA实现

    Sort a linked list in O(n log n) time using constant space complexity. 1.分析 该题主要考查了链接上的合并排序算法. 2.正确代 ...

  8. 【原】从一个bug浅谈YUI3组件的资源加载

    篇前声明:为了不涉及业务细节,篇内信息统一以某游戏,某功能代替 前不久,某游戏准备内测客户端,开发人员测试过程中发现某功能突然不灵了,之前的测试一切ok,没有发现任何异常,第一反应是,游戏内浏览器都是 ...

  9. 【POJ】2492 A bug's life ——种类并查集

    A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 28211   Accepted: 9177 De ...

随机推荐

  1. v-charts使用心得

    前端er经常都会遇到使用echarts的时候,特别是弄后台管理的报表等地方,而v-charts是echarts的vue版本(饿了么写的),基本上能应付普通的图表.传送门 隐藏提示框与图例 v-char ...

  2. js 从URL上获取参数

    //获取匹配的        function getUrlParam(name) {             var reg = new RegExp("(^|&)" + ...

  3. ArcGIS三种方式打断相交线------Planarize Lines工具

    1. 只有一个layer图层时,我们只需要选择”Planarize Lines“工具即可. (1)选择工具栏”Customize“选项: (2)选择Customize工具栏中的”Toolbars“选项 ...

  4. 语义SLAM的数据关联和语义定位(二)Semantic Localization Via the Matrix Permanent

    论文假设和单目标模型 这部分想讲一下Semantic Localization Via the Matrix Permanent这篇文章的一些假设. 待求解的问题可以描述为 假设从姿态\(x\)看到的 ...

  5. AsyncTask POST请求

    布局: <?xml version="1.0" encoding="utf-8"?> <android.support.constraint. ...

  6. Android Studio离线打包5+SDK

    dcloud官网下载最新版5+SDK 解压后,Android Studio导入HBuilder-Hello,选择From eclispe 修改assets/data/dcloud_control.xm ...

  7. 解决:Determining IP Information for eth0...问题

    环境:Centos 6.2     VMWare Workstation 7.1.2  故障现象: 在虚拟机中启动Centos,在启动页面中停留在Determining IP Information ...

  8. SQL Server 查询表的字段对应描述、数据类型、长度

    create procedure proc_view_cloumns ( ) ) AS select b.name,a.value,c.name, b.max_length from sys.exte ...

  9. jquery.validate,错误信息位置

    好长时间没有用jquery.validate.js这个插件了,忘得差不多了.唉,好东西还是要经常拿出来看看的,今天用jquery.validate来做一个小东西,遇到一个问题,就是错误提示信息的位置问 ...

  10. 快速开发QCombox以及业务样式自定义

    这是我在项目实战中的个人总结,写的仓促,有些东西也不一定准确,有些是自己推断的,还希望各位多多指教,多多评论. 关于QCombox如果不需要自定义,其实写UI是很简单的. 创建实例:QComboBox ...