输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
//周二, 2017-6-21 每天在忙啥
//判断是都指针是否为空,若为空
//1 两指针都为空,
//2 一个指针为空
//3 若都不为空
//4 比较首节点,若p1>p2,则在p2中移动,
//若p2>p1,则造p1中移动。
if(pHead1==NULL&&pHead2==NULL) return NULL;
if(pHead1==NULL&&pHead2!=NULL) return pHead2;
if(pHead2==NULL&&pHead1!=NULL) return pHead1;
ListNode *res=NULL;
ListNode *p1=pHead1;
ListNode *p2=pHead2;
ListNode *pt=NULL;
///循环和连接
while(p1!=NULL&&p2!=NULL)
{
//思路;用pHead1当做头
if(p1->val>=p2->val)
{
////1 这里没有想明白
if(res==NULL)
{ res=p2;
pt=res;
}
else
{
res->next=p2;
res=p2;
}
//2 这里为什么
p2=p2->next;
//怎么连接
}
else
{
if(res==NULL)
{
res=p1;
pt=res;
}
else
{
res->next=p1;
res=p1;
}
p1=p1->next;
}
}
//3 这里没有想明白
if(p1!=NULL)
{
res->next=p1;
}
if(p2!=NULL)
{
res->next=p2;
}
//如何记住头指针
return pt;
}
};