题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
/*
涉及到指针就很容易出错,所以把某个(或两个都)为空时的情况单独列出来,
res用来指向上一个ListNode,因为需要修改上一个指针中的next成员,head
用来存放链表的头。
*/
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)return pHead2;
else if(pHead2==NULL)return pHead1;
ListNode* res=NULL,* head=NULL;
while(pHead1!=NULL&&pHead2!=NULL)
{
if(pHead1->val<=pHead2->val)
{
//res==NULL只有可能是第一次比较出现,因为res==NLL则
//不会进入循环
if(res==NULL)
{
res=pHead1;
head=pHead1;
}
else{
//修改上一个节点的next指向需要插入的节点
//res指向需要插入的节点
res->next=pHead1;
res=pHead1;
}
pHead1=pHead1->next;
}
else
{
if(res==NULL)
{
res=pHead2;
head=pHead2;
}
else{
res->next=pHead2;
res=pHead2;
}
pHead2=pHead2->next;
}
}
if(pHead1==NULL)
{
res->next=pHead2;
}
else
{
res->next=pHead1;
}
return head;
}
/*其实可以用很多其他的方法,例如队列,但是这个是最节省空--
间时间的方法
*/