本题的思路就是将结点从小到大插入,组成一个新的链表
第一步比较pHead1和pHead2的大小,哪个比较小就作为新链表的头,用newhead来表示
然后pHead1和pHead2继续比较,哪个小就被插入新结点,直到有一个全部被插入。再将另一个剩下的所有结点全部插入。
来看看具体代码:
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 )
{ if(pHead1==NULL) return pHead2; //只要有一个是空就返回另一个
if(pHead2==NULL) return pHead1;
struct ListNode* newhead=NULL,*tail=NULL;
if(pHead1->val<pHead2->val)
{
newhead=tail=pHead1;
pHead1=pHead1->next;
}
else //确定新链表的头
{
newhead=tail=pHead2;
pHead2=pHead2->next;
}
while(pHead1!=NULL&&pHead2!=NULL)
{
if(pHead1->val<pHead2->val)
{
tail->next=pHead1; //较小值插入新链表中
pHead1=pHead1->next;
tail=tail->next;
}
else
{
tail->next=pHead2;
pHead2=pHead2->next;
tail=tail->next;
}
}
if(pHead1==NULL)
tail->next=pHead2; //将剩下的链表全部插入新链表
if(pHead2==NULL)
tail->next=pHead1;
return newhead;
}