Contents

递归学习

Contents

今天leetcode上整了两道链表题都用到了递归思想

1.[21. 合并两个有序链表](21. 合并两个有序链表 - 力扣(LeetCode) (leetcode-cn.com))

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

var mergeTwoLists = function (list1, list2) {
    if (list1 === null) return list2;
    if (list2 === null) return list1;
    if (list1.val < list2.val) {
        list1.next = mergeTwoLists(list1.next, list2);
        return list1
    } else {
        list2.next = mergeTwoLists(list1, list2.next);
        return list2
    }
};

if (list1 === null) return list2;

if (list2 === null) return list1;

这两行代码既可以判断首先传入的值也可以结束递归

list1.next = mergeTwoLists(list1.next, list2);

从第一次函数调用开始,当list1链表val小于list2链表的val时,list1这一个节点就是头节点,然后看list1.next,这里list.next作为新的链表传入mergeTowList函数继续判断,一层一层递归下去,直到满足结束递归的条件,开始返回,并且此时开始返回的是一层一层的next,最后形成一个新的链表.

2.[24. 两两交换链表中的节点](24. 两两交换链表中的节点 - 力扣(LeetCode) (leetcode-cn.com))