关阿姨带你横扫LeetCode系列之合并两个有序链表|Java 刷题打卡

343 阅读2分钟

关阿姨正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接

首先跟大家阐明一点就是,每道算法题都有多种解法,我们只讲LeetCode上几种优秀的解题思路~,希望

可以帮助到大家,那我们先来看下题目描述吧~

一、题目描述:

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

image.png

输入: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;
        }

}

刷题总结

如果大家还有其他解题思路,只要能实现要求,都是没问题的,条条大路通罗马,不要仅仅局限于我讲的这种解法哈~,优秀的思路和代码更具备学习意义,我们一起加油吧