• LeetCode 148 Sort List


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

    思路:要想时间复杂度达到O(n log n) ,那么有两种。一种是合并排序,还有一种是高速排序,而要想空间复杂度为常数。那么仅仅能使用递归,本人使用的是递归的合并排序。代码例如以下:
    /**
     * Definition for singly-linked list.
     * class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) {
     *         val = x;
     *         next = null;
     *     }
     * }
     */
    public class Solution {
       private ListNode merge(ListNode l1, ListNode l2) {
            if(l1==null&&l2==null) return null;
            ListNode head=new ListNode (-1);
            ListNode pNode=head;
            while(l1!=null||l2!=null){
    			if(l1==null) {
    				pNode.next=l2;
    				return head.next;
    			}
    			if(l2==null){
    				pNode.next=l1;
    				return head.next;
    			}
                if(l1.val>l2.val){
    				pNode.next=l2;
    				l2=l2.next;
                }else {
    				pNode.next=l1;
    				l1=l1.next;
                }
                pNode=pNode.next;                   
            }
            return head.next;
        }
       private ListNode mergeSort(ListNode head){
           if(head==null||head.next==null)   //just one element
               return head;
           ListNode p=head, q=head, pre=null;
           while(q!=null&&q.next!=null){
               q=q.next.next;
               pre=p;
               p=p.next;  //divide into two parts
           }
           pre.next=null;
           ListNode lhalf=mergeSort(head);
           ListNode rhalf=mergeSort(p);  //recursive
           return merge(lhalf, rhalf);   //merge
       }
        public ListNode sortList(ListNode head) {
            return mergeSort( head);
        }
    }



  • 相关阅读:
    poj 2262
    poj 1050
    poj 1730
    poj 1061
    【设计模式】简单工厂模式学习
    【待学】
    [设计模式]策略模式和单一职责
    Windows live writer 误删 草稿 恢复
    [Linq]Linq To Sql (2)
    MVC 学习日志1(上)
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7009667.html
Copyright © 2020-2023  润新知