1.题目链接:
https://leetcode.cn/problems/merge-two-sorted-lists/submissions/628524070/
2.题目描述:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例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 均按 非递减顺序 排列
3.解法(递归): 记住相信你的递归函数
算法思路:
1. 递归函数的含义:(你要相信递归函数,一定可以把它们合并,并且返回合并后的头节点。
交给你两个链表的头结点,你帮我把它们合并起来,并且返回合并后的头结点;
2. 函数体:选择两个头结点中较小的结点作为最终合并后的头结点,然后将剩下的链表交给递归函数 去处理;
3. 递归出口:当某一个链表为空的时候,返回另外一个链表。
注意注意注意:链表的题一定要画图,搞清楚指针的操作!
Java算法代码:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if( l1 == null) return l2;
if( l2 == null) return l1;
if(l1.val <= l2.val){
l1.next = mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next = mergeTwoLists(l1,l2.next);
return l2;
}
}
}
运行结果:

算法流程图解(递归):(可以自己进行展开)

逻辑展开:也就是说,这里认为这个头节点,指向后面递归函数返回给我的有序链表(相信他可以给我返回后面有序链表的头节点)。

---------------------------------------------------------------------------------------------------------------------------------
记住,相信你的递归函数,它可以做到!
记住,不理解时候,去尝试手动展开!
记住,逻辑展开(你不可能对所有的题目都进行手动展开)!
488

被折叠的 条评论
为什么被折叠?



