TypechoJoeTheme

Toasobi的博客

合并两个排序的链表(简单)

本文最后更新于2023年03月14日,已超过555天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

还是一道链表题,我们可以发现二叉树和链表的题一般都很适合用递归进行实现

那么这道题该怎么进行递归呢?

我们知道,递归即是把一个大的任务分成多个相同逻辑的小任务执行。在此题中,我们可以把每次取两个链表中最小的节点当做新链表的靠前节点当做小任务,为了完成该任务,我们也需要每次递归返回一个节点。

代码如下:

<div>/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
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;
        }
    }
}
</div>

这里在补充一个分析递归的思路,一般分析递归我们是模拟运行,一路走到底进行分析。在这道题中,我们还可以这样分析递归:即第一次递归,我们看成1->mergeTwoLists(2->4,1->3->4);然后返回1节点。之后所有的递归中我们都这样分析,整个做题的流程就能清晰很多。

朗读
赞(0)
评论 (0)