一开始想法用sort函数
这是最开始的代码 报错了
class Solution {
public:
ListNode* sortList(ListNode* head) {
ListNode* p1=head;
ListNode* p2=head->next;
if(p1->val<p2->val){
p1=head->next;
p1->next=p2->next;
p2=p2->next;
}else{
sort(p1->val(),p2->val());
return;
}
}
};
改进:
class Solution {
public:
int sort(ListNode* m, ListNode* end, int temp){
if(m == end){
return 0;
}
int key = m->val;
ListNode* l = m;
ListNode* r = l->next;
while(r !=end){
if(r->val < key){
l = l->next;
temp = l->val;
l->val = r->val;
r->val = temp;
r = r->next;
}else{
r = r->next;
}
}
temp = l->val;
l->val = m->val;
m->val = temp;
sort(m, l, 0);
sort(l->next, end, 0);
return 0;
};
ListNode* sortList(ListNode* head) {
sort(head, nullptr, 0);
return head;
}
};
时间复杂度为O(nlogn)
空间复杂度是O(n)