合并K个已排序的链表

合并k个已排序的链表

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

C++中优先队列的用法和普通队列无异,注意比较方式的写法:

//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;
//greater和less是std实现的两个仿函数

在这里我们需要自定义比较,代码如下:

struct comp{  // 自定义比较
    bool operator()(ListNode *a, ListNode *b) {
        return a->val > b->val;
    }
};

class Solution {
public:
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        priority_queue<ListNode*, vector<ListNode *>, comp> pq;
        for (int i = 0; i < lists.size(); ++i)
            if (lists[i] != NULL) pq.push(lists[i]);
        ListNode dummyHead(0);
        ListNode *p = &dummyHead;
        while(!pq.empty()) {
            ListNode *q = pq.top();
            pq.pop();
            if (q->next) pq.push(q->next);  // 放回
            p = p->next = q;
        }
        return dummyHead.next;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论
博主您好,我有两个问题想请教下您, 1.为什么这样初始化优先级队列时会发生段错误? // while(!lists.empty()){ // if (lists.back()!=nullptr) { // q.push(lists.back()) ; // lists.pop_back(); // } // } 2.初始化指针时为何不能是 ListNode* dummy(0); ListNode* p = dummy; 最后返回用dummy->next; 同样也返回段错误
点赞 回复 分享
发布于 2021-01-23 18:59
priority_queue 排序为什么是 return a->val > b->val; 我感觉应该是从小到打排序吧。
点赞 回复 分享
发布于 2020-09-16 11:32

相关推荐

04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
谁知道呢_:要掉小珍珠了,库库学三年,这个结果
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

更多
牛客网
牛客企业服务