该题借用了评论区大佬的思路,(原先是准备在原链表中直接进行插入排序的,结果代码写到80多行,结果还不正确,于是采用了开辟一个新节点的思路)。
思路是,先将两个链表从第一位开始比较,小的就插入在空节点的后面,形成新的链表,然后依次排序,这里面有一个注意点是判断其中一个链表为空的时候结束循环,又因为该题是升序好的,所以可以将不是空的那个链表直接插入在新建的链表尾部。有一个注意点记得先保存新链表的头节点,不然后面遍历会找不到头。

struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 )
{
    struct ListNode* New=(struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* temp=New;
    while(pHead1!=NULL&&pHead2!=NULL)
    {
        if(pHead1->val<pHead2->val)  //比较大小,然后插入新链表。
        {
            temp->next=pHead1;
            temp=pHead1;
            pHead1=pHead1->next;
        }
        else
        {                   
            temp->next=pHead2;
            temp=pHead2;
            pHead2=pHead2->next;   
        }       
    }
    if(pHead1!=NULL)
    {
        temp->next=pHead1;
    }
   if(pHead2!=NULL)
    {
        temp->next=pHead2;
    }
    return New->next;
}