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

算法与数据结构(合并K个升序链表)

思路

有了合并两个链表的基础后,这个的一种方法就是可以进行顺序合并,我们可以先写一个函数用来合并两个链表,再在合并K个链表的的函数中循环调用它。

解题过程

解析这个函数

首先,可以先判断,如果a为空,则返回b。如果b为空,则返回a。

在合并链表时,我们需要一个head保存合并之后链表的头,我们可以把head设为一个虚拟的头(不保存val)。

其次,我们还需要一个指针(cur)记录下一个插入位置的前一个位置。

我们还需要设置pa,pb指针来对a,b链表进行遍历

当pa和pb都非空时:

若pa->val < pb->val,则将pa插入到cur的后面,pa向后移动一个。

若pa->val >= pb->val,则将pb插入到cur的后面,pb向后移动一个。

两个插入完之后,cur都需要向后移动一个,方便下次插入。

循环结束之后,运用三元运算符,若pa不为空,则cur直接接上pa剩下的。反之,接上pb。合并完链表后,返回head.next

遍历lists:

将空链表不断与list中的数据进行合并

最后返回ans。

代码

//顺序合并
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* a, ListNode* b)
    {
        if(!a)
        return b;
        if(!b)
        return a;
        ListNode head, *cur = &head, *pa = a, *pb = b;
        while(pa && pb)
        {
            if(pa->val < pb->val)
            {
                cur->next = pa;
                pa = pa->next;
            }
            else
            {
                cur->next = pb;
                pb = pb->next;
            }
            cur = cur->next;
        }
        cur->next = (pa ? pa : pb);
        return head.next;
    }
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        ListNode* ans = nullptr;
        for(int i = 0; i < lists.size();i++)
        {
           ans = mergeTwoLists(ans, lists[i]);
        }
        return ans;
    }
};


http://www.kler.cn/a/538659.html

相关文章:

  • vue学习5
  • 嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?
  • 天津三石峰科技——汽车生产厂的设备振动检测项目案例
  • 【LLM】o1/R1系列LLM数据篇
  • PromptSource安装报错
  • 搜维尔科技:提供人形机器人传感器的应用案例分析
  • C#面试常考随笔14: 方法如何传递不定数量的参数?params关键字怎么使用?
  • kafak最新安装教程【kafka_2.13-3.9.0】双语版
  • 电商行业的新篇章:3D和AR技术助力销售转化率提升!
  • 基于html和vue.js以及其他编程技术打造一个仿京东购物网站平台
  • c++学习笔记——c++基础
  • 【DeepSeek】DeepSeek概述 | 本地部署deepseek
  • Day81:数据的保存
  • Thinkpad T480s/X1c 2018 Manjaro Sway(ArchLinux)安装指纹(ID 06cb:009a)
  • 【C语言标准库函数】三角函数
  • 基于SpringBoot的巡游出租管理系统
  • 2025年最新版武书连SCD期刊(中国科学引文数据库)来源期刊已更新,可下载PDF版!需要的作者进来了解~
  • MySQL 数据库编程-C++
  • 消费电子产品中的噪声对TPS54202的影响
  • DeepSeek 与网络安全:AI 驱动的智能防御
  • go数据结构学习笔记
  • Flink 调用海豚调度器 SQL 脚本实现1份SQL流批一体化的方案和可运行的代码实例
  • COBOL语言的区块链
  • 使用 Python-pptx 库提取 PPTX 文件中的结构与文字
  • 关于Redis的持久化
  • 系统URL整合系列视频三(前端代码实现)