全代码:
核心思想是使用递归,需要先判断那一个链表中的变量值更小,则更小的那个链表再次进入函数mergeTowLists进行递归,直到边表为空,则根据递归的特性返回所有值即可
/**
* 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) {
//使用递归,所以不需要循环
if(list1 == nullptr)//如果链表list1为空则返回链表list2
{
return list2;
}else if(list2 == nullptr){//如果链表list2为空则返回链表list1
return list1;
}else if(list1->val<list2->val){//如果链表list1->val小于list2->val 则递归
//也就是说将那个链表中的val变量更小,那么久进入mergetowlists函数进行再次判断
//直到最后为空为止,之后不断地返回即可 这就是递归算法
list1->next = mergeTwoLists(list1->next,list2);
return list1;
}else{
list2->next = mergeTwoLists(list1,list2->next);
return list2;
}
}
};