21. 合并两个有序链表(C语言)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 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 均按 非递减顺序 排列
这道题我看了力扣的官方解题思路后选择了迭代法,那个动图真的很形象,可以结合代码理解:
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{struct ListNode* pHead=(struct ListNode*)malloc(sizeof(struct ListNode));//动态分配一个节点以便找到合并后的链表;struct ListNode* pre=pHead;//pre在两个链表中移动传递数值;while(l1!=NULL&&l2!=NULL){if(l1->val<l2->val){pre->next=l1;l1=l1->next;}else{pre->next=l2;l2=l2->next;}pre=pre->next;}pre->next=(l1==NULL)?l2:l1;//链表长度可能会不相同,将最长的链表最后一部分直接挂到已经排序好的链表后面return pHead->next;
}
来个递归解法:
1,如果有一个链表为空,则返回那个非空链表;
2,若非空,如果l1的val小于等于l2的val,则让l1的指针域指向l1->next和l2合并的有序链表(因为此时l1已经是合并后链表的头节点了,只需要从l1的下一个节点开始和l2合并就可以了),并返回l1;否则,就让l2的指针域指向l2->next和l1合并的有序链表,并返回l2;
代码如下:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(!l1||!l2)return l1?l1:l2;if(l1->val<=l2->val){l1->next=mergeTwoLists(l1->next,l2);return l1;}else{l2->next=mergeTwoLists(l1,l2->next);return l2;}}
};
21. 合并两个有序链表(C语言)相关推荐
- LeetCode 21.23.剑指 Offer II 078. 合并两个有序链表 | C语言版
LeetCode 21. 合并两个有序链表 | C语言版 LeetCode 21. 合并两个有序链表 题目描述 解题思路 思路一:使用栈 代码实现 运行结果 参考文章: 思路二:减少遍历节点数 代码实 ...
- 【LeetCode】【HOT】21. 合并两个有序链表(递归)
[LeetCode][HOT 100]21. 合并两个有序链表 文章目录 [LeetCode][HOT 100]21. 合并两个有序链表 package hot;import java.util.Ar ...
- [递归|迭代] leetcode 21 合并两个有序链表
[递归|迭代] leetcode 21 合并两个有序链表 1.题目 题目链接 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2 ...
- leetcode 21 java_LeetCode 21. 合并两个有序链表
LeetCode 21. 合并两个有序链表 题目 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1-> ...
- Java实现 LeetCode 21 合并两个有序链表
21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...
- LeetCode 21. 合并两个有序链表(链表)
上一篇博客:LeetCode 20. 有效的括号(栈.字符串) 写在前面:大家好!我是ACfun,我的昵称来自两个单词Accepted和fun.我是一个热爱ACM的蒟蒻.最近萌生了刷LeetCode ...
- 合并两个有序链表 C语言 leetcode21题
目录 1.题目来源 2.函数介绍 3.问题示例 4.函数实现 代码 1.题目来源 21. 合并两个有序链表 - 力扣(LeetCode)https://leetcode.cn/problems/mer ...
- 21. 合并两个有序链表 JavaScript实现
21. 合并两个有序链表 合并有序链表 一.递归 递归详解 /*** Definition for singly-linked list.* function ListNode(val, next) ...
- 两个有序链表序列的交集_LeetCode | 21.合并两个有序链表
点击上方蓝字关注我们 1.LeetCode | 2.两数相加 2.LeetCode | 206.反转链表 3.LeetCode | 1.两数之和 4.LeetCode | 703.数据流中的第K大元素 ...
最新文章
- 当你学了现在的忘了前面的
- 【渗透测试】初探进程伪装
- IBM HyperLedger fabric 详解
- android客户端cookies,android – 将cookie添加到客户端请求OkHttp
- python find函数 和index的区别_使用带有find和index的map时Python2和Python3之间的区别...
- Technical Tcode List
- Qt之QThread用法
- vue 表单 input checkbox
- log4j.properties配置详解(转载)
- 停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法...
- 统计学中RR OR AR HR的区别
- FFmpeg Windows版 官网下载与安装
- mx250显卡天梯图_mx250显卡天梯图_2020最新笔记本显卡天梯图,看看你的显卡排在哪里吧...
- 谷露猎头系统3.0新功能:Mapping模块,助你轻松画出动态组织架构图
- (二)验证码模块(随机英文验证and随机英文数字混合验证+Session)
- Win10邮箱管理QQ邮箱+163邮箱
- 如何开启全新旅途,实现旅游市场活力复苏
- explain 介绍
- yacclex-Chapter1
- html5调整文字段落之间的距离,css设置p段落上下间距距离
热门文章
- spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10
- java实现责任链模式_我的Java设计模式-责任链模式
- 谷歌云服务宕机,苹果iCloud也不行了
- 如何区分ABS和PVC光纤槽道?
- shell怎么把负数变成正数_excel怎么计算平方根-记住简单的收藏复杂的
- tv英语域名注册_企业邮箱十万个为什么——域名篇
- 成功解决model_selection\_search.py:584: DeprecationWarning: fit_params as a constructor argument was d
- DayDayUp:博主,在此,祝愿大家(十五种编程语言输出),2019年春节快乐!猪年诸事大吉!学要有所成,劳要有所获!
- 图像边缘检测,检测亦或简化
- 统计学习方法第四章朴素贝叶斯法-李航