有关数组的归并排序的内容可以看看:
https://blog.csdn.net/qq_34799070/article/details/106660278
ListNode* sortList(ListNode* head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* slow=head,*fast=head,*pre=head;
while(fast&&fast->next){
pre=slow;//pre是slow前一个
slow=slow->next;
fast=fast->next->next;
}
pre->next=nullptr;
return merge2list(sortList(head),sortList(slow));
}
ListNode* merge2list(ListNode* h1,ListNode* h2){
if(h1==NULL) return h2;
if(h2==NULL) return h1;
if(h1->val<h2->val){
h1->next=merge2list(h1->next,h2);
return h1;
}
else{
h2->next=merge2list(h1,h2->next);
return h2;
}
}
有关ListNode的节点定义如下:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};