一、思路:

第一种:求出每一个链表的最小值,然后把这个节点放到合并的结果链表里面,这个链表指向next

第二种:优先级队列,头结点放到优先级队列里面,将top的那一个放到合并的链表里面,再讲top指向next,push到队列里面

二、代码

第一种思路:


class Solution {
public:ListNode *insert(ListNode *nowNode, int val) {if (nowNode == NULL)return new ListNode(val);else {nowNode->next = new ListNode(val);return nowNode->next;}}ListNode* mergeKLists(vector<ListNode*>& lists) {ListNode *res = NULL, *nowNode = res;while (true) {bool isAllNull = true;int minVal = INT_MAX, pos = -1;for (int i = 0; i < lists.size(); i++){if (lists[i] != NULL) {isAllNull = false;if (lists[i]->val < minVal) {pos = i;minVal = lists[i]->val;}}}if (isAllNull)return res;lists[pos] = lists[pos]->next;if (nowNode == NULL)res = nowNode = insert(nowNode, minVal);elsenowNode = insert(nowNode, minVal);}return res;}
};

第二种思路:来源:https://leetcode-cn.com/problems/merge-k-sorted-lists/solution/c-you-xian-dui-lie-liang-liang-he-bing-fen-zhi-he-/

class Solution {
public:// 小根堆的回调函数struct cmp{  bool operator()(ListNode *a,ListNode *b){return a->val > b->val;}};ListNode* mergeKLists(vector<ListNode*>& lists) {priority_queue<ListNode*, vector<ListNode*>, cmp> pri_queue;// 建立大小为k的小根堆for(auto elem : lists){if(elem) pri_queue.push(elem);}// 可以使用哑节点/哨兵节点ListNode dummy(-1);ListNode* p = &dummy;// 开始出队while(!pri_queue.empty()){ListNode* top = pri_queue.top(); pri_queue.pop();p->next = top; p = top;if(top->next) pri_queue.push(top->next);}return dummy.next;  }
};

leetcode C++ 23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。相关推荐

  1. LeetCode题解-23 合并K个排序链表 Hard

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [1->4->5,1->3->4,2->6 ] 输出: 1->1->2 ...

  2. LeetCode 21.23.剑指 Offer II 078. 合并两个有序链表 | C语言版

    LeetCode 21. 合并两个有序链表 | C语言版 LeetCode 21. 合并两个有序链表 题目描述 解题思路 思路一:使用栈 代码实现 运行结果 参考文章: 思路二:减少遍历节点数 代码实 ...

  3. leetcode C++ 25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。

    一.思路: 先实现两个节点翻转,再实现k个节点翻转,最后实现一组一组翻转 二.C++代码: class Solution { public:ListNode* swap(ListNode *f1, L ...

  4. python实现单链表快速排序升序linkedqueue_同时对多个数组进行排序

    关于 同时对多个数组进行排序的搜索结果 回答 本人学习数据结构时看到的不错的总结,共享一下了 文件有一组记录组成,记录有若干数据项组成,唯一标识记录的数据项称关键字; 排序是将文件按关键字的递增(减) ...

  5. 几种排序与最大K问题

    图片链接 0. 链表归并和快排 链表排序常用归并,但是快排面试常出: 一定要理解归并的本质: 两步走: 1. 先切分成(有序)两部分,此处各部分都是有序的 2. 两部分有序合并 切分成两部分的最小粒度 ...

  6. 数组合并假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法,将这 n 个数组合并到一个数组,且各元素按升序排列。即实现函数-C-icoding-排序-数据结构

    数组合并 假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法, 将这 n 个数组合并到一个数组,且各元素按升序排列.即实现函数: void merge_arrays(const ...

  7. 链表每k个反转 java_K 个一组翻转链表

    leetcode第25题(困难)问题描述 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后 ...

  8. 单链表的创建、删除、反转、插入、排序操作

    单链表的创建.删除.反转.插入.排序操作 文章目录 单链表的创建.删除.反转.插入.排序操作 1.1 链表引言 1.2 单链表节点的数据结构 1.3 创建链表 1.4 打印整个链表 1.5 链表插入数 ...

  9. linux awk 排序,利用Shell中awk和sort命令合并同类数据后并依据某一列进行排序

    待处理的数据格式如下: 为了便于统计分析,对数据进行如下处理: 当姓名相同的时候,将后面的值相加,最后依据后面值的大小进行排序. 思路:先使用awk对数据进行合并,然后使用sort对数据进行排序.aw ...

最新文章

  1. 老张喝茶 教你同步异步 阻塞与非阻塞(转)
  2. 开课吧python小课值得么-领导想提拔你,从来看的不是努力!
  3. overlay网络的优势
  4. 视频直播技术详解(1)采集
  5. Qtcreator 之中文目录
  6. latex中bibtex中引用会议和期刊论文时的写法及规则
  7. 使用ab对站点进行压力测试
  8. SQL select 语法(转)
  9. 1964年诞生的第一代电子计算机,世界第一台电子计算机诞生的年份是?
  10. linux挑战:历史命令_博客挑战:分享您关于社区运作方式的知识
  11. Spring+Hibernate 零散知识点
  12. 拓扑量子计算机 超导 光,科学家发现新型拓扑超导材料 有望推动实现拓扑量子计算...
  13. ElementUI:navmenu导航中,开启vue-router 的模式后,点击触发事件而不进行路由跳转
  14. ghostscript处理PDF/拆分/压缩/合并/转换
  15. sync.Once 使用及解析
  16. C++课后作业 10.教材习题7_6:哺乳动物类Mammal派生出狗类Dog
  17. 如何实现电脑快速开机
  18. JavaScript键盘鼠标事件处理
  19. 笔试必备:48道SQL练习题(Oracle为主)
  20. 【玩转CSS】盒子模型

热门文章

  1. Lodop 分页详解,可详细了呢
  2. tensorflow 之 tf.reshape 之 -1
  3. Apache下部署Django 的样式问题
  4. 扩展 OpenLayers.Layer.WMS 为自定义的瓦片浏览服务
  5. 排除字段重复行的SQL
  6. Windows Mobile和Wince(Windows Embedded CE)的字符集问题
  7. Google首席软件工程师Joshua Bloch谈如何设计一款优秀的API【附PPT】
  8. Flex 主窗体给弹出窗体传值
  9. struts导入Excel进行解析
  10. MySQL优化--where条件字段的顺序对效率的影响 (02)