题解:合并两个有序链表(easy)——递归求解
目录
- 1.题目
- 2.题解
- 3.参考代码
- 4.总结
1.题目
题目链接:LINK
2.题解
本题有两种解法,
- 一是用循环去处理 链接:【刷题记录】合并两个有序数组、移除元素
- 二是用递归去处理 将在下面中说明
本篇博客讲用递归如何去处理。
3.参考代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2)
{
//递归方法
ListNode* head = dfs(list1,list2);
return head;
}
ListNode* dfs(ListNode* list1, ListNode* list2)
{
if(list1 == nullptr) return list2;
if(list2 == nullptr) return list1;
if(list1->val < list2->val) {list1->next = dfs(list1 -> next,list2);return list1;}
else {list2->next = dfs(list1, list2->next);return list2;}
}
};
4.总结
我们这道题既可以用循环去做,也可以用递归去做。
相对于用循环去处理本题,用递归更加合适方便。
哪种题适合用循环去处理,哪种题适合用递归去处理,请参见下面链接:
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
EOF