关阿姨正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接
首先跟大家阐明一点就是,每道算法题都有多种解法,我们只讲LeetCode上几种优秀的解题思路~,希望
可以帮助到大家,那我们先来看下题目描述吧~
一、题目描述:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 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 均按 非递减顺序 排列
二、思路分析:
首先,我们知道L1和L2均为升序链表,即两个链表均是从小到大排列的,所以我们只需要递归的比对两个靠前的节点,决定哪个节点排在前面,当链表为空的时候则比对完成,退出递归。
三、代码实现
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//递归出口,当l1或l2为空时,则无需再合并
if (l1 == null) {
return l2;
} else if (l2 == null) {
return l1;
} else if (l1.val < l2.val) {
//当l1的值小于l2,则l1的节点在前,并使下一节点继续与当前l2合并
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
//当l2的值小于l1,则l2的节点在前,并使下一节点继续与l1合并
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
刷题总结
如果大家还有其他解题思路,只要能实现要求,都是没问题的,条条大路通罗马,不要仅仅局限于我讲的这种解法哈~,优秀的思路和代码更具备学习意义,我们一起加油吧