148-Sort-List
0x0 题目详情
0x1 解题思路
0x2 解题思路
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode sortList(ListNode head) {
if(head==null || head.next==null){
return head;
}
return recur(head);
}
private ListNode recur(ListNode head){
if(head.next==null){
return head;
}
ListNode mid=null;
ListNode fast=head;
ListNode slow=head;
while(fast.next!=null && fast.next.next!=null){
fast=fast.next.next;
slow=slow.next;
}
mid=slow.next;
slow.next=null;
ListNode leftHead=recur(head);
ListNode rightHead=recur(mid);
return merge(leftHead,rightHead);
}
private ListNode merge(ListNode lhs,ListNode rhs){
ListNode dummy=new ListNode(-1);
ListNode ptr=dummy;
ListNode next=null;
while(lhs!=null && rhs!=null){
if(lhs.val<=rhs.val){
next=lhs.next;
lhs.next=ptr.next;
ptr.next=lhs;
ptr=ptr.next;
lhs=next;
}else{
next=rhs.next;
rhs.next=ptr.next;
ptr.next=rhs;
ptr=ptr.next;
rhs=next;
}
}
while(lhs!=null){
next=lhs.next;
lhs.next=ptr.next;
ptr.next=lhs;
ptr=ptr.next;
lhs=next;
}
while(rhs!=null){
next=rhs.next;
rhs.next=ptr.next;
ptr.next=rhs;
ptr=ptr.next;
rhs=next;
}
return dummy.next;
}
}0x3 课后总结
Last updated