使用归并
class Solution {
public ListNode sortList(ListNode head) {
if(head==null || head.next==null)return head;
ListNode fast=head;
ListNode slow=head;
while(fast.next!=null && fast.next.next!=null){
fast=fast.next.next;
slow=slow.next;
}
ListNode next=slow.next;//得到后半段的第一个,slow为中间或者第一段的最后一个
slow.next=null;
ListNode left=sortList(head);
ListNode right=sortList(next);
ListNode res=merge(left,right);
return res;
}
public ListNode merge(ListNode left,ListNode right){//merge也递归
if(left==null && right==null)return null;
if(right==null)return left;
if(left==null)return right;
ListNode head=null;
if(left.val<=right.val){
head=left;
head.next=merge(left.next,right);
}else{
head=right;
head.next=merge(left,right.next);
}
return head;
}
}