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

剑指offer22_合并两个排序的链表

合并两个排序的链表


输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。

数据范围

链表长度 [ 0 , 500 ] [0,500] [0,500]

样例
输入:1->3->5 , 2->4->5输出:1->2->3->4->5->5
解决方案:二路归并
  1. 初始化
    • 新建虚拟头结点 dummy(保护结点),并让 cur 指针指向 dummy
  2. 比较与合并
    • 比较 l1l2 当前结点的值 val
      • l1->val < l2->val
        • cur->next 指向 l1,并将 l1 后移。
      • 否则
        • cur->next 指向 l2,并将 l2 后移。
    • 移动 cur 指针到新连接的结点(cur = cur->next)。
  3. 处理剩余链表
    • l1l2 为空时,将 cur->next 指向未遍历完的链表(剩余部分直接接上)。
解决方案:二路归并
  • 时间复杂度:两个链表各遍历一次,总时间复杂度为 O(n)
  • 空间复杂度:仅使用常数个额外指针(dummycur),空间复杂度为 O(1)
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* merge(ListNode* l1, ListNode* l2) {auto dummy = new ListNode(-1), cur = dummy;while(l1 && l2){if(l1->val < l2->val){cur = cur->next = l1;l1 = l1->next;}else{cur = cur->next = l2;l2 = l2->next;}}if(l1) cur->next = l1;if(l2) cur->next = l2;return dummy->next;}
};
http://www.xdnf.cn/news/13791.html

相关文章:

  • 【C】 USB CDC、Bulk-OUT 端点
  • 观测云,全球领先的监控观测平台亮相亚马逊云科技中国峰会!
  • 迭代优化法解决问题实例
  • day27/60重写(补充)
  • 流体仿真CFD技术在好氧活性污泥曝气系统改造中的应用
  • module_obj笔记
  • 手阳明大肠经之温溜穴
  • MySQL基础知识(DDL、DML)
  • YOLO-FireAD:通过混合注意力与双池化融合实现高精度实时火灾检测
  • 【PyQt5】从零开始的PyQt5 - QTextEdit 篇
  • 2025北京智源大会核心内容
  • RAG系统中Rerank技术的深度解析与应用实践
  • DNS的工作原理
  • 【AI News | 20250611】每日AI进展
  • IPv6检测指标中的IPv6授权体系是什么意思?(国科云)
  • HTML5 定位网页元素
  • 让DELPHI11及之后的新版本编译的程序支持Windows XP
  • 2025暑假第三十二届全国高校人工智能(多模态大模型+具身智能)与嵌入式高级师资培训通知
  • 6.11本日总结
  • MVVM 分层思想详解
  • Binder
  • matlab脉冲信号并绘制波形2025.6.11
  • 12.安卓逆向2-frida hook技术-HookJava重载方法
  • element-MessageBox 弹框组件 调整按钮位置(确认在左,取消在右)、删除场景回车调取消事件,默认调确认事件
  • 串口通信入门基础
  • 【Linux】Makefile基础
  • Halcon深度图转换(real、uint2、byte)
  • 基本多线程编译make命令
  • 达梦数据库raw绑定磁盘-DSC集群部署
  • 再说一说LangChain Runnable接口