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

LeetCode - 21. 合并两个有序链表

题目

21. 合并两个有序链表

思路

我会采用双指针的方法,同时遍历两个链表,比较当前节点的值,将较小的节点添加到结果链表中。

具体思路是这样的:

首先创建一个哑节点(dummy node)作为合并后链表的头部,这样可以简化边界情况的处理

用两个指针分别指向两个链表的当前节点

比较两个指针所指节点的值,将值较小的节点添加到结果链表,并将对应的指针向后移动

重复步骤3,直到其中一个链表遍历完毕

将另一个还有剩余的链表直接接到结果链表后面

返回dummy.next作为合并后的链表头

读者可能出现的错误

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode* p1 = list1;ListNode* p2 = list2;ListNode* dummy = new ListNode(0);ListNode* cur = dummy;while(p1&&p2){if(p1->val >= p2->val){cur->next = p2;p2 = p2->next;}else{cur->next = p1;p1 = p1->next;}}if(p1){cur->next = p1;}else{cur->next = p2;}ListNode* newlist = cur;delete dummy;return newlist;}
};

没有更新cur指针:在每次连接节点后,没有执行cur = cur->next,导致cur一直停留在dummy节点,每次操作都会覆盖之前的连接。

当把后续的链表添加上的时候应该用while,而不是用if

返回值错误:应该返回dummy->next(合并后的链表头),而不是cur或newlist。

正确的代码

class Solution {
public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode* p1 = list1;ListNode* p2 = list2;ListNode* dummy = new ListNode(0);ListNode* cur = dummy;while(p1 && p2){if(p1->val >= p2->val){cur->next = p2;p2 = p2->next;}else{cur->next = p1;p1 = p1->next;}cur = cur->next;}while(p1){cur->next = p1;p1 = p1->next;cur = cur->next;}while(p2){cur->next = p2;p2 = p2->next;cur = cur->next;}ListNode* newhead = dummy->next;delete dummy;return newhead;}
};
http://www.xdnf.cn/news/1404685.html

相关文章:

  • 【前端教程】JavaScript 基础实战案例(5-10)
  • UE5多人MOBA+GAS 56、WSL + Docker 编排 Linux 服务器与 Windows 客户端
  • Linux基础1
  • AI融合高等教育:从通识到专业 - 学科+AI人才培养白皮书(上)
  • Linux查看Java进程PID、端口号和内存占用脚本
  • 【多项式】快速莫比乌斯变换(FMT)
  • ⭐CVPR2025 自动驾驶半监督 LiDAR 分割新范式:HiLoTs 框架深度解析
  • Python 数据分析:计算,分组统计2,df.groupby()和grouped.agg()。听故事学知识点怎么这么容易?
  • 告别图片处理焦虑:用imgix实现智能、实时且高效的视觉媒体交付(含案例、截图)
  • 一键掌控三线资源:极简 Shell 脚本实现 CPU·磁盘·内存可视化巡检
  • SRE命令行兵器谱之二:lsof - 解密“端口被占用”与“文件句柄泄漏”的终极侦探
  • MySQL-事务(下)-MySQL事务隔离级别与MVCC
  • 2021-11-10 C++不变初心数
  • ans1语法的一个例子nt5inf.cat
  • 详解Vue2、Vue3与React的Diff算法
  • TuringComplete游戏攻略(2.2存储器)
  • spark.sparkContext.broadcast() 与 org.apache.spark.sql.functions.broadcast 的区别
  • Docker实战避坑指南:从入门到精通
  • 神经网络激活函数:从ReLU到前沿SwiGLU
  • 分分合合,门模块方案又兴起了
  • 用更少的数据识别更多情绪:低资源语言中的语音情绪识别新方法
  • Vue生命周期、工程化开发和脚手架、组件化开发
  • hubert模型代码分析
  • 聚中原·贸全国·达世界,2026郑州台球展8月15至17举办
  • 深入解析Nginx常见模块1
  • 世界模型的典型框架与分类
  • 如何提高存储过程的可维护性
  • wav2vec2.0模型代码分析
  • vite Rendering 10 pagesReferenceError: document is not defined
  • OpenCV 图像形态学操作与边缘检测实战指南