/**
 * 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代表空节点。