zoukankan      html  css  js  c++  java
  • Sort List leetcode java

    题目:

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

    题解:

    考虑到要求用O(nlogn)的时间复杂度和constant space complexity来sort list,自然而然想到了merge sort方法。同时我们还已经做过了merge k sorted list和merge 2 sorted list。这样这个问题就比较容易了。

    不过这道题要找linkedlist中点,那当然就要用最经典的faster和slower方法,faster速度是slower的两倍,当faster到链尾时,slower就是中点,slower的next是下一半的开始点。

    解决了这些问题,题目就很容易解出了。

     代码如下:

     1     public ListNode sortList(ListNode head) {
     2         if(head == null|| head.next == null)
     3             return head;
     4         ListNode slow = head, fast = head, firsthalf = head;
     5         while(fast.next!=null&&fast.next.next!=null){
     6             slow = slow.next;
     7             fast = fast.next.next;
     8         }
     9         ListNode secondhalf = slow.next;
    10         slow.next = null;
    11         
    12         ListNode leftlist = null, rightlist =null;
    13         if(firsthalf!=secondhalf){
    14             leftlist = sortList(firsthalf);
    15             rightlist = sortList(secondhalf);
    16         }
    17         return mergeTwoLists(leftlist, rightlist);
    18     }
    19     
    20     public ListNode mergeTwoLists(ListNode leftlist, ListNode rightlist){
    21         if(rightlist == null)
    22             return leftlist;
    23         if(leftlist == null)
    24             return rightlist;
    25         
    26         ListNode fakehead = new ListNode(-1);
    27         ListNode ptr = fakehead;
    28         while(rightlist!=null&&leftlist!=null){
    29             if(rightlist.val<leftlist.val){
    30                 ptr.next = rightlist;
    31                 ptr = ptr.next;
    32                 rightlist = rightlist.next;
    33             }else{
    34                 ptr.next = leftlist;
    35                 ptr = ptr.next;
    36                 leftlist = leftlist.next;
    37             }
    38         }
    39         
    40         if(rightlist!=null)
    41             ptr.next = rightlist;
    42         if(leftlist!=null)
    43             ptr.next = leftlist;
    44         
    45         return fakehead.next;
    46     }

  • 相关阅读:
    【WPF】给下拉列表ComboBox绑定数据
    【C#】POST请求参数含中文,服务器解析得到乱码
    CentOS下搭建SVN服务器
    MySQL之ALTER
    深入PHP内核之ZVAL
    关于zend_parse_parameters函数
    PHP数组
    shell中比较字符串大小,>和<前需要加上进行转义,否则会输出到文件了
    awk编程基础
    【读书笔记】《Python_Cookbook3》第一章:数据结构和算法
  • 原文地址:https://www.cnblogs.com/springfor/p/3869372.html
Copyright © 2011-2022 走看看