当前位置:网站首页>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;
}
边栏推荐
猜你喜欢
随机推荐
吃瓜教程task05 第6章 支持向量机
基于TF-IDF 文本相似性实战 详细教程
第13章 类的继承-1
C语言文件操作——数据文件类型、文件判断、文件缓冲区详解
家·谱——人脸识别家谱系统
【CSDN21天学习挑战赛】第一天,配置环境外加实现mnist手写数字识别
二、Jmeter 核心配置文件
搭建PX4开发环境
切分字符串进行输出显示
Flask framework learning: template rendering and Get, Post requests
第10章 对象和类-2
Keras与tensorflow 使用基础
【备忘】于仕琪的libfacedetection相关
ClionIDE通过指定编译器编译
c 指针学习(1)
第5章 循环和关系表达式
软件测试风险识别
lspci 命令使用
(2) Construction of a real-time performance monitoring platform (Grafana+Prometheus+Jmeter)
数组的用法