概述
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
void change(ListNode* pre1,ListNode* p1,ListNode* pre2,ListNode* p2){
if(pre2==p1){
ListNode* p3=p2->next;
pre1->next=p2;p2->next=p1;p1->next=p3;
}else{
ListNode* p3=p2->next;
pre1->next=p2;p2->next=p1->next;
pre2->next=p1;p1->next=p3;
}
}
ListNode* res=new ListNode(0);ListNode* res2=res;
ListNode* qsort(ListNode* beginp,ListNode* endp){
if(beginp==nullptr||endp==nullptr||beginp==endp){
if(beginp!=nullptr) {
res->next=beginp;res=res->next;
}
return beginp;
}
int num=beginp->val;
// cout<<num<<endl;
// for(auto it=beginp;it!=endp->next;it=it->next) cout<<it->val<<" ";cout<<endl;
ListNode* p1=beginp;ListNode*p2=beginp->next;
ListNode* nw=new ListNode(0);nw->next=beginp;
ListNode* pre=p1;ListNode* pre2=nw;
while(p2!=nullptr&&p2!=endp->next){
if(p2->val<num){
pre2=p1;
p1=p1->next;
if(p1!=p2){
change(pre2,p1,pre,p2);
ListNode* tp=p1;
p1=p2;p2=tp;
}
}
pre=p2;
p2=p2->next;
}
if(beginp!=p1){
change(nw,beginp,pre2,p1);
ListNode* tp=beginp;
beginp=p1;p1=tp;
}
qsort(beginp,p1);
qsort(p1->next,endp);
return nw->next;
}
ListNode* sortList(ListNode* head) {
if(head==nullptr) return nullptr;
ListNode* endp=new ListNode(0);
ListNode* tp=head;
while(tp->next!=nullptr) tp=tp->next;
qsort(head,tp);
return res2->next;
}
};
最后
以上就是斯文画笔为你收集整理的单链表排序(要求不使用容器 且 节点交换 **面试题的全部内容,希望文章能够帮你解决单链表排序(要求不使用容器 且 节点交换 **面试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复