美文网首页
合并k个顺序链表

合并k个顺序链表

作者: 小幸运Q | 来源:发表于2021-03-21 22:39 被阅读0次

image.png

先每个链表读首位元素,优先队列pop的时候删除对应链表首位元素然后修改list指针,将新首位元素放入优先队列中,如果新首位元素是NULL注意要跳过。直到最后优先队列为空。

  • 如何获取优先队列中元素对应的list行数? 用pair容器装<List*,int行数>即可。
class Solution {
public:
    struct cmp{
        bool operator()(pair<ListNode*,int>a,pair<ListNode*,int>b){
            return (a.first)->val>(b.first)->val;
        }
    };
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        if(lists.size()==0){
            return NULL;
        }
        ListNode * res=NULL;
        ListNode * ends=NULL;
        priority_queue<pair<ListNode*,int>,vector<pair<ListNode*,int>>,cmp>pq;
        int i=0;
        for(i=0;i<lists.size();i++){
            if(lists[i]!=NULL){
                pq.push(make_pair(lists[i],i));
            }
        }
        if(pq.size()==0){
            return NULL;
        }
        auto t=pq.top();
        res=t.first;
        ends=res;
        pq.pop();
        lists[t.second]=lists[t.second]->next;
        if(lists[t.second]!=NULL){
            pq.push(make_pair(lists[t.second],t.second));
        }

        while(pq.size()>0){
            auto t=pq.top();
            ends->next=t.first;
            ends=ends->next;
            pq.pop();
            lists[t.second]=lists[t.second]->next;
            if(lists[t.second]!=NULL){
                pq.push(make_pair(lists[t.second],t.second));
            }
        }
        return res;
    }
};

相关文章

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • 合并k个顺序链表

    先每个链表读首位元素,优先队列pop的时候删除对应链表首位元素然后修改list指针,将新首位元素放入优先队列中,如...

  • 23. 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 思路--顺序合并 python3解...

  • LeetCode-23-合并K个有序链表

    LeetCode-23-合并K个有序链表 题目 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂...

  • ARTS第五周2020620

    Algorithm 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • 2018-07-26

    合并有顺序的数组 打印两个有序链表的公共部分 在单链表和双链表中删除倒数第k个节点 单链表 双链表 删除链表的中间...

  • 合并K个排序链表【LeetCode:23】

    题目: 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: ...

  • Swift - LeetCode - 合并K个排序链表

    题目 合并K个排序链表 问题: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 解题思路:...

  • LeetCode:合并K个排序链表

    合并K个排序链表(困难) 题目叙述: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • LeetCode 专题 :分治算法

    LeetCode 第 23 题:归并多个有序链表 传送门:23. 合并K个排序链表。 合并 k 个排序链表,返回合...

网友评论

      本文标题:合并k个顺序链表

      本文链接:https://www.haomeiwen.com/subject/sqqacltx.html