当前位置: 首页 > news >正文

力扣——23合并升序链表

目录

1:题目描述:

2.算法思想:

3.代码展示:

1:题目描述:

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[1->4->5,1->3->4,2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2:

输入:lists = []
输出:[]

示例 3:

输入:lists = [[]]
输出:[]

2.算法思想:

  1. 义比较器​​:

    • 由于priority_queue默认是大根堆(堆顶元素最大),而我们希望每次取出最小的元素
    • 自定义比较器Compare,当l1->val > l2->val时返回true,这样构造出小根堆
  2. ​初始化优先级队列​​:

    • 创建一个存储ListNode*的小根堆pq
  3. ​将所有链表元素入队​​:

    • 遍历输入的lists数组
    • 对于每个链表,从头节点开始,将所有节点依次加入优先级队列
    • 注意:这里直接将原链表的节点拆散加入队列,会破坏原链表结构
  4. ​构建结果链表​​:

    • 创建一个虚拟头节点dummy简化操作
    • 使用指针p跟踪当前链表的末尾
    • 循环从优先级队列中取出最小元素(堆顶):
      • 将取出的节点连接到p->next
      • p移动到新连接的节点
      • 从队列中移除该节点
  5. ​返回结果​​:

    • 返回dummy.next,即合并后的链表头节点

3.代码展示:

 //因为priority_queue默认是大根堆,堆顶是最大的元素,所以我们需要自定比较器,让它从小到大class Compare {public:bool operator()(ListNode* l1, ListNode* l2) {return l1->val > l2->val;}
};ListNode* mergeKLists(vector<ListNode*>& lists) {//使用优先级队列,priority_queue<ListNode*, vector<ListNode*>, Compare>pq;//把lists的每个元素都入队for (int i = 0; i < lists.size(); i++) {while (lists[i]){pq.push(lists[i]);lists[i] = lists[i]->next;}}//重新定义一个链表ListNode dummy(-1);ListNode* p = &dummy;//始终指向最后一个元素,开始链表为空,故指向头节点//接下来开始循环pq,while (!pq.empty()){p->next = pq.top();pq.pop();p = p -> next;}return dummy.next;}

23. 合并 K 个升序链表 - 力扣(LeetCode)https://leetcode.cn/problems/merge-k-sorted-lists/

http://www.xdnf.cn/news/246403.html

相关文章:

  • 【ESP32】st7735s + LVGL使用-------图片显示
  • python多线程输入字符和写入文件
  • 关系型数据库设计指南
  • 2025五一杯数学建模竞赛选题建议+初步分析
  • terraform实现本地加密与解密
  • sftp连接报错Received message too long 168449893
  • 大鱼吃小鱼开源
  • leetcode 977. Squares of a Sorted Array
  • 【免费】1992-2021年各省GDP数据/各省地区生产总值数据
  • GoogleTest:简单示例及ASSERT/EXPECT说明
  • [FPGA 官方 IP] Binary Counter
  • 多节点监测任务分配方法比较与分析
  • 深度学习-神经网络参数优化的约束与迭代策略
  • 今日行情明日机会——20250430
  • python拜占庭将军
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的电商直播流量转化路径研究
  • 计算机操作系统知识集合
  • 2025五一杯B题五一杯数学建模思路代码文章教学: 矿山数据处理问题
  • android 中的AMS 和 WMS
  • 【Day 14】HarmonyOS分布式数据库实战
  • linux下安装ollama网不好怎么办?
  • C++类和对象
  • c++文字游戏_废弃医院篇1.0
  • MySQL 查找指定表名的表的主键
  • javaScript——DOM续(五)
  • Vercel 全面指南:从零部署到高级实践
  • RAG技术完全指南(一):检索增强生成原理与LLM对比分析
  • Java反射机制终极指南:从基础到高级应用
  • 浅谈高校教育改革
  • C语言中数字转化为字符串的方法