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

    Sort List

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

    算法思想:

    时间复杂度为O(nlogn)的排序算法,有快排、归并、堆排序,快排需要往前遍历,因此不适合单链表,堆排序可以,但是需要O(n)的空间,因此本题的最佳答案应该是归并排序。

    与Array的merge sort思想完全一致。

    代码如下:

     1 public class Solution {
     2  public ListNode sortList(ListNode head) {
     3         if(head == null || head.next == null) return head;
     4         ListNode hhead = new ListNode(0);
     5         hhead.next = head;
     6         ListNode fast = hhead;
     7         ListNode slow = hhead;
     8         while(fast != null && fast.next != null){
     9             fast = fast.next.next;
    10             slow = slow.next;
    11         }
    12         ListNode right = slow.next;
    13         slow.next = null;
    14         ListNode left = sortList(head);
    15         right = sortList(right);
    16         return merge(left, right);
    17     }
    18     private ListNode merge(ListNode l1,ListNode l2){
    19         ListNode hhead = new ListNode(0);
    20         hhead.next = l1;
    21         ListNode p = hhead;
    22         while(p.next != null){
    23             if(p.next.val > l2.val){
    24                 ListNode tem = l2;
    25                 l2 = l2.next;
    26                 tem.next = p.next;
    27                 p.next = tem;
    28             }else
    29                 p = p.next;
    30                 if(l2 == null) return hhead.next;
    31             }
    32         p.next = l2;
    33         return hhead.next;
    34         }
    35 }
  • 相关阅读:
    sublime text3配置javascript运行环境
    TCP/IP协议详解
    markdown基本语法
    pytest失败重跑
    pytest参数化
    Httprunner初步学习
    基础面向对象
    面试题
    包和loggging模块
    常用模块
  • 原文地址:https://www.cnblogs.com/huntfor/p/3859375.html
Copyright © 2011-2022 走看看