合并两个有序链表 --- 递归
·
目录
一:题目

题目链接:https://leetcode.cn/problems/merge-two-sorted-lists/
二:算法原理

三:代码
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
{
//递归出口
if(l1 == nullptr) return l2;
if(l2 == nullptr) return l1;
//比较两个节点大小,选择小节点
if(l1->val <= l2->val)
{
l1->next = mergeTwoLists(l1->next,l2);
return l1;
}
else
{
l2->next = mergeTwoLists(l1,l2->next);
return l2;
}
}
};
四:递归相关总结
1.循环 VS 递归
循坏(迭代)与递归本质上都是解决重复的子问题,所以二者在理论上是可以转换的

例如上面数组的打印,使用循环和递归都可以做到
但是在实践过程中,有的时候使用循环方便,而有的时候使用递归方便,我们应该在什么情况下使用循环,什么时候使用递归呢?
2.递归 VS 深搜
递归的展开图实际上就是一颗树做一次深度优先遍历,所以二者没有区别

我们应该在什么情况下使用循环,什么时候使用递归呢?对于这个问题的解决,就与深搜是树的形状有关

但并不是所有情况都是这样,有的题目如果有特殊要求需要储存一些特殊信息什么的,可能此时使用循环也会比较麻烦
3.先序遍历 VS 后续遍历

递归的位置不同打印的顺序也会产生不同
中序遍历是二叉树特有的打印方式,多叉树中只有先序遍历和后序遍历
更多推荐



所有评论(0)