题目:
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例1:
输入: 4->2->1->3 输出: 1->2->3->4
示例1:
输入: 4->2 输出: 2->4
采用归并排序的算法如下:
class Solution {
public ListNode sortList(ListNode head) {
if(head==null||head.next==null)return head;
ListNode slow=head,fast=head.next;//针对只有两个节点的情况
while (fast!=null&&fast.next!=null){
slow=slow.next;
fast=fast.next.next;
}
ListNode temp=slow.next;
slow.next=null;//前半部分断开
ListNode left=this.sortList(head);
ListNode right=this.sortList(temp);
ListNode prev=new ListNode(-1);
ListNode res=prev;
while (left!=null&&right!=null){
if(left.val<right.val){
res.next=left;
left=left.next;
}else {
res.next=right;
right=right.next;
}
res=res.next;
}
res.next=left!=null?left:right;//处理剩余部分
return prev.next;
}
}