LeetCode第21题合并两个有序链表

继续打卡算法题,今天学习的是LeetCode的第21题合并两个有序链表,这道题目是道简单题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些帮助。

分析一波题目

看完题目,很容易想到构建一个新链表,然后每次遍历两个链表并找一个最小的节点作为新链表的节点,直到两个链表都遍历到了尾。这样需要记录两个链表遍历到的指针,这样会涉及到多个指针的变化,非常复杂了。

如果我们使用递归就可以避免这种多个指针的控制,只要控制递归结束条件就可以。

但是递归思想真的是非常不好讲清楚!!直接上代码

编码解决

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        //l1到达了尾部
        if (l1 == null) {
            return l2;
        }
        //l2到达了尾部
        else if (l2 == null) {
            return l1;
        }
        //节点判断 l1作为头节点
        else if (l1.val < l2.val) {
            //找l1的下一个节点
            l1.next = mergeTwoLists(l1.next, l2);
            //返回l1,成为上一个节点的next
            return l1;
        }
        //节点判断 l2作为头节点
        else {
            //重新找l2的下一个节点
            l2.next = mergeTwoLists(l1, l2.next);
            //返回l2,成为上一个节点的next
            return l2;
        }

    }
}

总结

递归对于解决嵌套循环多次的情况比较巧妙,但是递归很难讲清楚,我们可以举简单的数据例子,套入递归代码,这样就容易理解。

相关推荐
Wnq1007225 分钟前
工业场景轮式巡检机器人纯视觉识别导航的优势剖析与前景展望
人工智能·算法·计算机视觉·激光雷达·视觉导航·人形机器人·巡检机器人
炒空心菜菜44 分钟前
MapReduce 实现 WordCount
java·开发语言·ide·后端·spark·eclipse·mapreduce
天上路人2 小时前
AI神经网络降噪算法在语音通话产品中的应用优势与前景分析
深度学习·神经网络·算法·硬件架构·音视频·实时音视频
好吃的肘子2 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
汉克老师3 小时前
GESP2025年3月认证C++二级( 第三部分编程题(1)等差矩阵)
c++·算法·矩阵·gesp二级·gesp2级
sz66cm3 小时前
算法基础 -- 小根堆构建的两种方式:上浮法与下沉法
数据结构·算法
独行soc3 小时前
2025年渗透测试面试题总结-阿里云[实习]阿里云安全-安全工程师(题目+回答)
linux·经验分享·安全·阿里云·面试·职场和发展·云计算
緈福的街口3 小时前
【leetcode】94. 二叉树的中序遍历
算法·leetcode
wowocpp3 小时前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
后青春期的诗go3 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架