class Solution {
public:
ListNode* sortList(ListNode* head) {
if(!head || !head->next){
return head;
}
ListNode* fast=head->next;
ListNode* slow=head;
while(fast!=nullptr && fast->next!=nullptr){
fast=fast->next->next;
slow=slow->next;
}
ListNode* temp=slow->next;
slow->next=nullptr;
ListNode* left=sortList(head);
ListNode* right=sortList(temp);
ListNode* res=new ListNode(0);
ListNode* pt=res;
while(left!=nullptr && right!=nullptr){
if(left->val>right->val){
pt->next=right;
right=right->next;
}else{
pt->next=left;
left=left->next;
}
pt=pt->next;
}
pt->next=left==nullptr?right:left;
return res->next;
}
};