描述
给定一个节点数为n的无序单链表,对其按升序排序。
数据范围:0<n≤100000
要求:空间复杂度 O(n),时间复杂度 O(nlogn)
示例1
输入:[1,3,2,4,5]
返回值:{1,2,3,4,5}
示例2
输入:[-1,0,-2]
返回值:{-2,-1,0}
代码
注:只能通过一部分数据
/**
* 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 *h=head,*newHead=new ListNode(INT_MIN);
newHead->next=NULL;
while(h){
ListNode* p=newHead,*q=h;
while(p){
if(((q->val)>(p->val)&&(q->val)<(p->next->val))||p->next==nullptr)
break;
p=p->next;
}
h=h->next;
q->next=p->next;
p->next=q;
}
return newHead->next;
}
};
/**
* 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;
vector<int> vec;
ListNode *p=head;
while(p){
vec.push_back(p->val);
p=p->next;
}
sort(vec.begin(),vec.end());
ListNode* q=new ListNode(0);
p=q;
for(int i=0;i<vec.size();i++){
ListNode *h=new ListNode(vec[i]);
p->next=h;
p=p->next;
}
return q->next;
}
};