当前位置:网站首页>leetcode21. Merge two ordered linked lists
leetcode21. Merge two ordered linked lists
2022-08-11 05:46:00 【FussyCat】
leecode题链接:LeetCode21.合并两个有序链表
题目描述:
将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的.
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
提示:
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
解题思路:
分别使用递归法和迭代法.
以下用C语言实现:
递归法:
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
if (l1 == NULL) {
return l2;
} else if (l2 == NULL) {
return l1;
} else if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
迭代法:
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode)); /* The chain of distribution header */
struct ListNode *prev = head;
while (l1 != NULL && l2 != NULL) {
if (l1->val < l2->val) {
prev->next = l1;
l1 = l1->next;
} else {
prev->next = l2;
l2 = l2->next;
}
prev = prev->next;
}
prev->next = (l1 == NULL) ? l2 : l1; /* The situation of the first list is empty */
return head->next;
}
边栏推荐
猜你喜欢
随机推荐
Blender 初教程
C语言——函数的使用
QT circle函数(图片标注)
C语言结构体详解 (2) 结构体内存对齐,默认对齐数
吃瓜教程task01 第2章 模型评估与选择
task03 Pytorch模型定义
普林斯顿概率论读本读书笔记(阅读中......)
Flask框架学习:模板继承
【记录】TypeScript
搭建PX4开发环境
Flask框架学习:路由的尾部斜杠
华为od德科面试数据算法解析 2022-8-10 迷宫问题
注解式编程小记
Minecraft
简单做份西红柿炒蛋778
[转载]Verilog testbench总结
【备忘】从零开始搭建Yolo5训练环境
【网站小白】Hibernate插入数据成功,不报错,但是数据库中没有值
LeetCode43.字符串相乘 (大数相乘可用此方法)
(3) How Redis performs stress testing