递归学习
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,最后形成一个新的链表.