谁说快排不行

链表排序

http://www.nowcoder.com/questionTerminal/d75c232a0405427098a8d1627930bea6

快排也是可以的,多几个指针保存下哨兵位的左右子链表,需要注意的是处理当左右子链表为空的情况
时间复杂度O(nlogn),空间复杂度其实是O(logn),因为有栈的开销,但是其他解答里都是归并,其实也差不多,只有那个用cut的是满足题意的
ListNode* sort_inner_impl(ListNode* head, ListNode* end){
        if(!head || !head->next || head==end || head->next == end)return head;
        ListNode* lefthead,*leftend,*righthead,*rightend;
        ListNode* p=head;
        ListNode* cmp=head;
        lefthead=righthead=leftend=rightend=nullptr;
        while(p->next != end){
            p=p->next;
            if(p->val < cmp->val){
                if(!lefthead){
                    lefthead=p;
                }else{
                    leftend->next=p;
                }
                leftend=p;
            }else{
                if(!righthead){
                    righthead=p;
                }else{
                    rightend->next=p;
                }
                rightend=p;
            }
        }
        if(!lefthead){
            lefthead=cmp;
        }else{
            leftend->next=cmp;
            lefthead = sort_inner_impl(lefthead, cmp);
        }
        if(!righthead){
            cmp->next=end;
        }else{
            rightend->next = end;
            righthead = sort_inner_impl(righthead, end);
            cmp->next=righthead;
        }
        return lefthead;
    }
    
    ListNode* sortList(ListNode* head) {
        // write code here
        return sort_inner_impl(head, nullptr);
    }


全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++&nbsp;&amp;&nbsp;Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
评论
2
1
分享
牛客网
牛客企业服务