zoukankan      html  css  js  c++  java
  • 148. Sort List

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

    这道题要求用nlogn的时间复杂度去做,代码如下:

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; }
     7  * }
     8  */
     9 public class Solution {
    10     public ListNode sortList(ListNode head) {
    11         if(head==null||head.next==null) return head;//corner case:if the List is null or the length of List is just one.
    12         ListNode fast = head,slow = head,prev = null;
    13         while(fast!=null&&fast.next!=null){//find the middle of the listnode
    14             prev = slow;
    15             slow = slow.next;
    16             fast = fast.next.next;
    17         }
    18         //divide the List into two parts
    19         prev.next = null;
    20         //recursive the sortList
    21         ListNode l1=sortList(head);
    22         ListNode l2=sortList(slow);
    23         //conquer two parts together
    24         return combine(l1,l2);
    25     }
    26     public ListNode combine(ListNode l1,ListNode l2){
    27         ListNode l = new ListNode(0),p = l;
    28         while(l1!=null&&l2!=null){
    29             if(l1.val<=l2.val){
    30                 p.next = l1;
    31                 l1 = l1.next;
    32             }else{
    33                 p.next = l2;
    34                 l2 = l2.next;
    35             }
    36             p = p.next;
    37             if(l1!=null){
    38                 p.next = l1;
    39             }
    40             if(l2!=null){
    41                 p.next = l2;
    42             }
    43         }
    44         return l.next;
    45     }
    46 }
    47 // 

    本题是典型的merge sort,只不过输入的数据是链表而不是数组了,那么我们需要每次找到中间的位置,要用到快慢指针,所以每次寻找中间位置的时间复杂度是O(n),总共需要运行logn次,所以总的时间复杂度是nlongn

  • 相关阅读:
    xt
    UVA 10200 Prime Time (打表)
    CodeForces 540B School Marks
    CodeForces 540C Ice Cave (BFS)
    poj 3250 Bad Hair Day(栈的运用)
    hdu A Magic Lamp
    hdu 4325 Flowers(区间离散化)
    hdu 5500 Reorder the Books
    V2X之标准
    V2X的前生今世
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6359949.html
Copyright © 2011-2022 走看看