题解 | #单链表的排序#

单链表的排序

https://www.nowcoder.com/practice/f23604257af94d939848729b1a5cda08

提供两种方法
方法一:归并排序
ListNode* sortInList(ListNode* head) {
        if(!head || !head->next) return head;
        ListNode *slow=head,*qulick=head->next;
        while(qulick && qulick->next){
            slow=slow->next;
            qulick=qulick->next->next;
        }
        ListNode * r_head=slow->next;
        slow->next=NULL;
        ListNode *l=sortInList(head);
        ListNode *r=sortInList(r_head);
        return merge(l,r);
    }
    ListNode* merge(ListNode *l, ListNode* r){
        if(!l) return r;
        if(!r) return l;
        if(l->val<r->val){
            l->next=merge(l->next,r);
            return l;
        }
        r->next=merge(l,r->next);
        return r;
    }


方法二:快速排序
ListNode* sortInList(ListNode* head) {
        if(!head || !head->next) return head;
        ListNode *left=new ListNode(0),*mid=new ListNode(0),*right=new ListNode(0),*p=head,*tmp;
        int pivot=head->val;
        while(p){
            tmp=p->next;
            if(p->val<pivot){
                p->next=left->next;
                left->next=p;
            }else if(p->val==pivot){
                p->next=mid->next;
                mid->next=p;
            }else{
                p->next=right->next;
                right->next=p;
            }
            p=tmp;
        }
        left->next=sortInList(left->next);
        right->next=sortInList(right->next);
        getTail(left)->next=mid->next;
        getTail(mid->next)->next=right->next;
        return left->next;
    }
    
    ListNode* getTail(ListNode* p){
        while(p->next){
            p=p->next;
        }
        return p;
    }


全部评论

相关推荐

06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务