LeetCode 力扣 第21题解题笔记

题目:

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

LeetCode 力扣 第21题解题笔记_第1张图片

(1)递归解法

L1.val   意思是取链表L1的头结点

本题可以提炼出一个字问题,假设原问题是L1和L2,并且假设L1的值更小,那么合并L1,L2,就可以做如下考虑:取出头结点L1,解决子问题:合并L1next和L2,L1的next指向子问题的结果就可以了

   模式识别:子问题和原问题具有相同结构,意思就是说,返回值和要解决的问题都一致,考虑自上而下的递归。

 

 LeetCode 力扣 第21题解题笔记_第2张图片

因为递归要叠加栈,最坏情况下栈有O(M+N)的深度 

递归这个东西真的蛮好玩的,自己理解了后画了个图一下子就清晰了

LeetCode 力扣 第21题解题笔记_第3张图片

代码:

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        } else if (l2 == null) {
            return l1;
        } else if (l1.val < l2.val) {
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        } else {
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
    }
}

 

你可能感兴趣的:(leetcode,链表,算法)