LeetCode-148-排序链表

思路
要求时间复杂度为nlogn,那么只能考虑使用归并排序
代码
class Solution {
public ListNode sortList(ListNode head) {
if(head==null||head.next==null)return head;
ListNode fast=head.next;
ListNode slow=head;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
}
//找到中点,进行分割
ListNode tmp=slow.next;
slow.next=null;
ListNode left=sortList(head);
ListNode right=sortList(tmp);
ListNode res=new ListNode();
ListNode h=res;
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?right:left;
return h.next;
}
}
这篇博客详细介绍了如何使用归并排序算法对链表进行排序,代码实现中通过找到链表中点进行分割,然后递归地对左右两部分进行排序,最后将排序后的链表合并,整个过程保持了nlogn的时间复杂度。
855

被折叠的 条评论
为什么被折叠?



