LeetCode 148 Sort List

来源:互联网 发布:淘宝男模特红人 编辑:程序博客网 时间:2024/05/07 04:26

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);    }}



0 0
原创粉丝点击