/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
// write code here
// ListNode* cur1=pHead1,*cur2=pHead2;ListNode* var=new ListNode(1);
// ListNode* pre=var;
// while(cur1&&cur2)
// {
// if(cur1->val<cur2->val)
// {
// pre->next=cur1;pre=pre->next;cur1=cur1->next;
// }
// else
// {
// pre->next=cur2;pre=pre->next;cur2=cur2->next;
// }
// }
// while(cur1)
// {pre->next=cur1;pre=pre->next;cur1=cur1->next;}
// while(cur2)
// {pre->next=cur2;pre=pre->next;cur2=cur2->next;}
// pre->next=nullptr;
// ListNode* head=var->next;
// delete var;return head;
// }
//递归实现
if(pHead1==nullptr)return pHead2;//如果链表1已经递归结束返回链表2当前节点
if(pHead2==nullptr)return pHead1;//如果链表2已经递归结束返回链表1当前节点
if(pHead1->val<pHead2->val)
{
//如果当前链表1的节点值比较小,继续递归比较链表1当前节点的下一个
//节点和当前链表2的节点。
pHead1->next=Merge(pHead1->next, pHead2);
return pHead1;
}
else
{
pHead2->next=Merge(pHead2->next, pHead1);
return pHead2;
}
}
};
递归实现:下面是递归展开图,数字代表节点,0代表空节点。

京公网安备 11010502036488号