linked list简直了 two pointer的事情还需要联系这次忘记每次要判断head是否null 或者就一个node 先返回
然后就是找到中间 break开 然后分别sort这两个 再merge
merge不需要新空间!!
一个新的head 两个指针分别指向两个sublist的头 一个一个比 然后挪动指针就行了!!然后最后把剩下的加上去 记得dummy的事情
public class Solution {
public ListNode sortList(ListNode head) {
if ( head == null || head.next == null )
return head;
ListNode fast = head;
ListNode slow = head;
ListNode pre = new ListNode (0);
pre.next = slow;
while ( fast != null && fast.next != null ){
fast = fast.next.next;
pre = slow;
slow = slow.next;
}
pre.next = null;
ListNode list1 = sortList( head );
ListNode list2 = sortList( slow );
ListNode dummy = new ListNode ( 0 );
ListNode pt = dummy;
while ( list1 != null && list2 != null ){
if ( list1.val > list2.val ){
pt.next = list2;
list2 = list2.next;
}
else {
pt.next = list1;
list1 = list1.next;
}
pt = pt.next;
}
if ( list1 == null )
pt.next = list2;
if ( list2 == null )
pt.next = list1;
return dummy.next;
}
}