题解 | #合并k个已排序的链表#(优先队列重写仿函数)

合并k个已排序的链表

http://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

class Solution {
public:
    struct cmp{
        bool operator()(ListNode *A,ListNode *B){
            return A->val > B->val; // 小跟堆
        }
    };
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        if(!lists.size()) return nullptr;
        priority_queue<ListNode*, vector<ListNode*>, cmp> pq; // 重写仿函数 
//priority_queue<Type, Container, Functional>Type 就是数据类型,Functional 就是比较的方式。
//Container 就是容器类型(Container必须是用数组实现的容器比如vector,deque等等,但不能用 list。STL里面默认用的是vector)
        for(auto it : lists){
            if(it)pq.push(it); // 链表不能为空
        }
        ListNode *ans = new ListNode(0);
        ListNode *p = ans;
        p->next = NULL;
        while(!pq.empty()){
            ListNode *tmp = pq.top(); // 优先队列第一个链表
            pq.pop(); // 出队
            if(tmp->next)pq.push(tmp->next);
            p->next = tmp;
            p = p->next;
        }
        p->next = NULL;
        return ans->next;
    }
};

全部评论

相关推荐

07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:00
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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