2. 合并两个有序链表
题目链接:
题目描述:
题目示例:
算法原理(递归):
思路:
- 递归函数的含义:交给你两个链表的头结点,你帮我把它们合并起来,并且返回合并后的头结点;
- 函数体:选择两个头结点中较小的结点作为最终合并后的头结点,然后将剩下的链表交给递归函数去处理;
- 递归处理:当某一个链表为空的时候,返回另外一个链表。
注意: 链表的题一定要画图,搞清楚指针的操作!
解法代码(C++):
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1==nullptr) return list2;
if(list2==nullptr) return list1;
if(list1->val<list2->val) {
list1->next=mergeTwoLists(list1->next,list2);
return list1;
} else {
list2->next=mergeTwoLists(list2->next,list1);
return list2;
}
}
};
总结:
3. 反转链表
题目链接:
题目描述:
题目示例:
算法原理(递归):
思路:
- 递归函数的含义:交给你一个链表的头指针,你帮我逆序之后,返回逆序后的头结点;


