题解 | #合并k个已排序的链表#

合并k个已排序的链表

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

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
#include <queue>
class campare{
public:
    bool operator()(ListNode* a,ListNode*b){
        return a->val>b->val;
    }
};
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param lists ListNode类vector 
     * @return ListNode类
     */

    ListNode* mergeKLists(vector<ListNode*>& lists) {
        // write code here
        if(lists.empty())return nullptr;
        priority_queue<ListNode*,vector<ListNode*>,campare>minheap;
        for(int i=0;i<lists.size();i++){
            if(lists[i]!=nullptr){
            minheap.push(lists[i]);}
        }
        ListNode* dummy=new ListNode(0);
        ListNode* cur=dummy;
        while (!minheap.empty()) {
            ListNode* node=minheap.top();
            minheap.pop();
            cur->next=node;
            cur=cur->next;
            if(node->next!=nullptr){
                node=node->next;
                minheap.push(node);
            }

        
        }
        return dummy->next;


    }
};
  1. 使用优先队列(最小堆):首先,你可以使用一个优先队列(最小堆)来存储所有链表的头节点,以便快速获取最小的节点。
  2. 逐个处理节点:然后,从优先队列中取出最小的节点,将其添加到结果链表中,并更新该节点链表的头节点(如果它不是最后一个节点)。
  3. 重复过程:重复上述过程,直到所有链表中的节点都被添加到结果链表中。
  4. 返回结果链表的头节点。
全部评论

相关推荐

07-15 18:09
门头沟学院 Java
点赞 评论 收藏
分享
下个早班:秒挂就是不缺人
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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