题目描述:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
解题思路:归并排序:1,快慢指针找中点;2,递归调用mergeSort,3,合并两个链表
代码:
class Solution {
public:
ListNode* sortList(ListNode* head) {
if(!head||!head->next) return head;
ListNode*l=head,*m=head,*r=head;
while(r&&r->next){
r=r->next->next;
m=l;
l=l->next;
}
m->next=nullptr;
return merge(sortList(head),sortList(l));
}
ListNode*merge(ListNode*n1,ListNode*n2){
if(!n1) return n2;
if(!n2) return n1;
if(n1->val<=n2->val){
n1->next=merge(n1->next,n2);
return n1;
}else{
n2->next=merge(n2->next,n1);
return n2;
}
}
};