Leetcode No.21 Merge Two Sorted Lists合并两个有序链表(c++实现)
1. 题目
1.1 英文题目
Merge two sorted linked lists and return it as a sorted list. The list should be made by splicing together the nodes of the first two lists.
1.2 中文题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
1.3输入输出
输入 | 输出 |
---|---|
l1 = [1,2,4], l2 = [1,3,4] | [1,1,2,3,4,4] |
l1 = [], l2 = [] | [] |
l1 = [], l2 = [0] | [0] |
1.4 约束条件
- The number of nodes in both lists is in the range [0, 50].
- -100 <= Node.val <= 100
- Both l1 and l2 are sorted in non-decreasing order.
2. 分析
2.1 非递归算法
代码如下:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode head_node(0);
ListNode* cur_node = &head_node;
while (l1 != nullptr && l2 != nullptr) {
if (l1->val < l2->val) {
cur_node->next = l1;
l1 = l1->next;
} else {
cur_node->next = l2;
l2 = l2->next;
}
cur_node = cur_node->next;
}
cur_node->next = (l1 != nullptr ? l1 : l2);
return head_node.next;
}
};
参考:https://leetcode.com/problems/merge-two-sorted-lists/discuss/9714/14-line-clean-C%2B%2B-Solution
2.2 递归算法
代码如下:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == nullptr || (l2 != nullptr && l1->val > l2->val) ) {//为了让当前的l1始终小于l2
swap(l1, l2);
}
if (l1 != nullptr) {
l1->next = mergeTwoLists(l1->next, l2);//将小的节点依次加入l1
}
return l1;
}
};
参考:https://leetcode.com/problems/merge-two-sorted-lists/discuss/9814/3-lines-C%2B%2B-(12ms)-and-C-(4ms)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】