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

剑指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;}
};

相关文章:

  • 386.字典序排序
  • Xshell 8 客户端 免费版无需注册
  • 内核性能调优
  • Java八股文——Spring「SpringCloud 篇」
  • 代码随想录算法训练营第60期第六十五天打卡
  • C++默认构造函数被隐式删除
  • 某区域汽车多家4S店销售数据重叠度分析
  • 汇编(函数调用)
  • Node.js版本管理
  • LangChain文档加载器自动选择器:支持多种文件格式的统一加载方法
  • SpreadJS 在预算编制中的应用深度剖析
  • 日本滨松R669光电倍增管Hamamatsu直径51 mm 直径端窗型扩展红多碱光阴极面光谱灵敏度特性:300 至 900 nm
  • 生鲜商城源码系统设计+springboot3+vue3+JDK17(带用户协同过滤个性化推荐算法)
  • AX620Q上模型部署流程
  • Android Compose 自定义滑动进度条
  • JAVA CAS 详解
  • 【学习笔记】RTSP-Ovnif-GB28181
  • 5.Caffe
  • 如何抓取DP_AUX辅助通道数据
  • 简单实现shardingSphere + MybatisPlus分库分表2025
  • 怎么自己设计装修效果图/网站快速优化排名软件
  • 顶尖手机网站建设/小网站关键词搜什么
  • 蚌埠公司做网站/百度一下首页下载安装桌面
  • 做网站公司价格/变现流量推广app
  • php网站开发实例报告/360广告投放平台
  • 越秀区建网站的公司/上海优化网站seo公司