题解 | #单链表的排序#

单链表的排序

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

/**
 * 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
        //首先这题给了空间复杂度为O(n),时间复杂度为O(nlogn),那我肯定就意识到要用排序时间
        //时间复杂度为ologn的排序算法排一下就行了,因为归并排序不是很熟悉所以这里用一下堆排
        //这么说来还得练下归并排序啊。。。。好心累,为什么只有我是菜狗
       //哎,写了一大堆堆排没过,是你逼我无脑快排的。。
        int len=lenth(head);
        int array[len];
        int heapSize=len;//确定堆的范围
        int ans=0;//专门给array数组用的
        while(head)
        {
            array[ans++]=head->val;
            head=head->next;
        }
        //循环结束后array数组就变成了一个小根堆
        sort(array,&array[len]);
        ListNode* Head=new ListNode(0);
        ListNode* res=new ListNode(0);
        Head=res;
        for(int i=0;i<len;i++)
        {
            cout<<array[i]<<endl;
            ListNode* s=new ListNode(0);
            s->next=NULL;
            s->val=array[i];
            res->next=s;
            res=s;
        }
        return Head->next;
    }
    int lenth(ListNode* head)
    {
        int count=0;
        while(head)
        {
            count++;
            head=head->next;
        }
        return count;
    }
};
全部评论

相关推荐

能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
07-10 14:08
已编辑
江西农业大学 Java
念旧select:做完把项目放到自己硬盘里给他看,看完拷走
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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