将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 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语言)相关推荐

  1. LeetCode 21.23.剑指 Offer II 078. 合并两个有序链表 | C语言版

    LeetCode 21. 合并两个有序链表 | C语言版 LeetCode 21. 合并两个有序链表 题目描述 解题思路 思路一:使用栈 代码实现 运行结果 参考文章: 思路二:减少遍历节点数 代码实 ...

  2. 【LeetCode】【HOT】21. 合并两个有序链表(递归)

    [LeetCode][HOT 100]21. 合并两个有序链表 文章目录 [LeetCode][HOT 100]21. 合并两个有序链表 package hot;import java.util.Ar ...

  3. [递归|迭代] leetcode 21 合并两个有序链表

    [递归|迭代] leetcode 21 合并两个有序链表 1.题目 题目链接 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2 ...

  4. leetcode 21 java_LeetCode 21. 合并两个有序链表

    LeetCode 21. 合并两个有序链表 题目 将两个升序链表合并为一个新的升序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1-> ...

  5. Java实现 LeetCode 21 合并两个有序链表

    21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1 ...

  6. LeetCode 21. 合并两个有序链表(链表)

    上一篇博客:LeetCode 20. 有效的括号(栈.字符串)  写在前面:大家好!我是ACfun,我的昵称来自两个单词Accepted和fun.我是一个热爱ACM的蒟蒻.最近萌生了刷LeetCode ...

  7. 合并两个有序链表 C语言 leetcode21题

    目录 1.题目来源 2.函数介绍 3.问题示例 4.函数实现 代码 1.题目来源 21. 合并两个有序链表 - 力扣(LeetCode)https://leetcode.cn/problems/mer ...

  8. 21. 合并两个有序链表 JavaScript实现

    21. 合并两个有序链表 合并有序链表 一.递归 递归详解 /*** Definition for singly-linked list.* function ListNode(val, next) ...

  9. 两个有序链表序列的交集_LeetCode | 21.合并两个有序链表

    点击上方蓝字关注我们 1.LeetCode | 2.两数相加 2.LeetCode | 206.反转链表 3.LeetCode | 1.两数之和 4.LeetCode | 703.数据流中的第K大元素 ...

最新文章

  1. 当你学了现在的忘了前面的
  2. 【渗透测试】初探进程伪装
  3. IBM HyperLedger fabric 详解
  4. android客户端cookies,android – 将cookie添加到客户端请求OkHttp
  5. python find函数 和index的区别_使用带有find和index的map时Python2和Python3之间的区别...
  6. Technical Tcode List
  7. Qt之QThread用法
  8. vue 表单 input checkbox
  9. log4j.properties配置详解(转载)
  10. 停止预览时调用Camera.release(), 出现Method called after release()异常问题原因及解决办法...
  11. 统计学中RR OR AR HR的区别
  12. FFmpeg Windows版 官网下载与安装
  13. mx250显卡天梯图_mx250显卡天梯图_2020最新笔记本显卡天梯图,看看你的显卡排在哪里吧...
  14. 谷露猎头系统3.0新功能:Mapping模块,助你轻松画出动态组织架构图
  15. (二)验证码模块(随机英文验证and随机英文数字混合验证+Session)
  16. Win10邮箱管理QQ邮箱+163邮箱
  17. 如何开启全新旅途,实现旅游市场活力复苏
  18. explain 介绍
  19. yacclex-Chapter1
  20. html5调整文字段落之间的距离,css设置p段落上下间距距离

热门文章

  1. spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10
  2. java实现责任链模式_我的Java设计模式-责任链模式
  3. 谷歌云服务宕机,苹果iCloud也不行了
  4. 如何区分ABS和PVC光纤槽道?
  5. shell怎么把负数变成正数_excel怎么计算平方根-记住简单的收藏复杂的
  6. tv英语域名注册_企业邮箱十万个为什么——域名篇
  7. 成功解决model_selection\_search.py:584: DeprecationWarning: fit_params as a constructor argument was d
  8. DayDayUp:博主,在此,祝愿大家(十五种编程语言输出),2019年春节快乐!猪年诸事大吉!学要有所成,劳要有所获!
  9. 图像边缘检测,检测亦或简化
  10. 统计学习方法第四章朴素贝叶斯法-李航