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