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