
Leetcode 21. Merge Two Sorted Lists
比较当前节点的值:比较两个列表当前的头节点,决定归属哪一个到结果列表中。 递归处理剩余节点:将当前归属的节点的下一个节点继续传递给递归函数,处理剩余部分。 返回结果:递归返回第一个处理后的结果,将其作为当前的结果节点。
创建结果列表:初始化一个头节点和一个尾节点,提供一个游标来逐步添加节点。 比较节点值:在每次循环中,比较两个列表当前的头节点的值,决定将当前节点添加到结果列表的尾部。 移动指针:将不再处理的列表的指针向前移动一位。 处理剩余节点:当其中一个列表处理完毕后,将其剩余节点逐一添加到结果列表中。 返回结果:返回结果列表的头节点开始部。
发布日期:2025-04-04 23:11:44
浏览次数:14
分类:精选文章
本文共 1655 字,大约阅读时间需要 5 分钟。
Merge Two Sorted Lists
当我们需要将两个有序的列表合并成一个有序的新列表时,常用的方法包括递归和迭代。以下将详细介绍这两种方法,并提供相应的代码实现。
递归方法
递归是一种常见的解决方案,其思路是将问题分解,将较大的问题转化为较小的问题进行处理。对于合并两个有序列表,递归的方法可以简单地描述为:
这种方法的优点是简洁直观,但它可能不够高效,尤其是在处理大规模数据时会引起递归深度过深的问题。
示例代码如下:
// 定义单结点结构struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(nullptr) {}};class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (!l1) return l2; if (!l2) return l1; if (l1->val < l2->val) { l1->next = mergeTwoLists(l1->next, l2); return l1; } else { l2->next = mergeTwoLists(l1, l2->next); return l2; } }};
迭代方法
迭代方法则通过循环遍历来逐步构建结果列表。这种方法的主要步骤如下:
这种方法的优点是空间复杂度低,时间复杂度是O(n + m),其中n和m分别是两个列表的节点数。
示例代码如下:
class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* head = new ListNode(-1); ListNode* end = head; while (l1 && l2) { if (l1->val < l2->val) { end->next = l1; l1 = l1->next; } else { end->next = l2; l2 = l2->next; } end = end->next; } if (l1) { end->next = l1; } else { end->next = l2; } return head->next; }};
总结
上述两种方法各有优劣。递归方法实现简单易懂,但不适合大规模数据;迭代方法空间占用更少,更适合处理大量数据。但在实际应用中,可以根据具体需求选择相应的实现方法。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月02日 18时35分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP系列:使用PHP实现登录注册功能的完整指南
2025-03-28
"WARNING: Increasing RAM size to 1GB" and "Cannot set up guest memory 'xxx.ram': Invalid argument".
2025-03-28
04-docker-commit构建自定义镜像
2025-03-28
05-docker系列-使用dockerfile构建镜像
2025-03-28
09-docker系列-docker网络你了解多少(下)
2025-03-28
#C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
2025-03-29
cytoscape安装java_Cytoscape史上最全攻略
2025-03-29
c语言编写单片机中断,C语言AVR单片机中断程序写法
2025-03-29
java教学团队管理系统(ssm)
2025-03-29
java教师管理系统(ssm)
2025-03-29
java教师课堂助手app(ssm)
2025-03-29
java教育辅导班信息网(ssm)
2025-03-29
DDNS动态域名无固定IPSEC配置实战
2025-03-29
DELL笔记本UEFI+GPT安装window10与Ubuntu双系统
2025-03-29
EasyUi的使用与代码编写(一)
2025-03-29
Ehcache Java开源缓存框架
2025-03-29
el-select下拉框修改背景色
2025-03-29
ElasticSearch - 基于 JavaRestClient 操作索引库和文档
2025-03-29
ElasticSearch - 索引库和文档相关命令操作
2025-03-29
elasticsearch 7.7.0 单节点配置x-pack
2025-03-29