class Solution {
public:
ListNode* sortList(ListNode* head) {
if(!head||!head->next)return head;
return mergeSort(head);
}
ListNode*mergeSort(ListNode* head){
if(!head||!head->next)return head;
ListNode*slow=head;
ListNode*fast=head->next;
while(fast&&fast->next){
slow=slow->next;
fast=fast->next->next;
}
ListNode*l1=head;
ListNode*l2=slow->next;
slow->next=nullptr;
l1=mergeSort(l1);
l2=mergeSort(l2);
return merge(l1,l2);
}
ListNode*merge(ListNode*l1,ListNode*l2){
ListNode*head=new ListNode(0);
ListNode*cur=head;
while(l1&&l2){
if(l1->val<l2->val){
cur->next=l1;
l1=l1->next;
cur=cur->next;
}
else{
cur->next=l2;
l2=l2->next;
cur=cur->next;
}
}
if(l1==nullptr)cur->next=l2;
else cur->next=l1;
return head->next;
}
};
递归到长度为1,此时l1与l2链表有序
合并两有序链表(注意头节点)