Sort a linked list in O(n log n) time using constant space complexity.
Example 1:
Input: 4->2->1->3 Output: 1->2->3->4
Example 2:
Input: -1->5->3->4->0 Output: -1->0->3->4->5
思路:链表归并排序,我好忧伤,费半天劲也没写对,原因是我一直在处理出现环的情况。其实归并前二分时,把链断掉会会省时省力很多.....
class Solution {
public ListNode merge(ListNode A,ListNode B){
if(A == null && B == null) return null;
if(A == null && B != null) return B;
if(A != null && B == null) return A;
if(A.val < B.val){
A.next = merge(A.next,B);
return A;
}else{
B.next = merge(B.next,A);
return B;
}
}
public ListNode sortList(ListNode head) {
if(head == null) return null;
if(head.next == null) return head;
ListNode one = head;
ListNode two = head;
ListNode pre = head;
while(two != null && two.next != null){
pre = one;
one = one.next;
two = two.next.next;
}
pre.next = null;
ListNode A = sortList(head);
ListNode B = sortList(one);
return merge(A,B);
}
}