题解:合并两个有序链表(easy)——递归求解
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