/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类 the head node
* @return ListNode类
*/
ListNode* sortInList(ListNode* head) {
// write code here
if(head==nullptr || head->next==nullptr){
return head;
}
ListNode *slow=head;
ListNode *fast=head->next;
while(fast!=nullptr && fast->next!=nullptr){
fast=fast->next->next;
slow=slow->next;
}
ListNode *newList=slow->next;
slow->next=nullptr;
ListNode *left=sortInList(head);
ListNode *right=sortInList(newList);
ListNode *lHead=new ListNode(0);
ListNode *p=lHead;
while(left!=nullptr && right!=nullptr){
if(left->val<right->val){
lHead->next=left;
left=left->next;
}else{
lHead->next=right;
right=right->next;
}
lHead=lHead->next;
}
lHead->next=left!=nullptr?left:right;
return p->next;
}
};