• [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 }
  • 相关阅读:
    Python基础笔记(五)
    Python基础笔记(四)
    Python基础笔记(三)
    Python基础笔记(二)
    Python基础笔记(一)
    分页存储过程
    MD Test
    vue路由的配置技巧
    Echarts的使用与配置项
    js中call,apply,bind之间的区别
  • 原文地址:https://www.cnblogs.com/huntfor/p/3859375.html
Copyright © 2020-2023  润新知