输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==nullptr&&pHead2==nullptr)//很多人没有这句,但我觉得应该加上
return nullptr;
else if(pHead1==nullptr) return pHead2;
else if(pHead2==nullptr) return pHead1;
ListNode* p=(pHead1->val <= pHead2->val)?pHead1 : pHead2,*pr=p;//把头指针存起来,用来返回
ListNode* p1=pHead1,*p2=pHead2;
if(p==p1)p1=p1->next;
else if(p==p2)p2=p2->next;//把第一个放进去,感觉这段有点蠢
while(p1!=nullptr&&p2!=nullptr)
{
if(p1->val > p2->val)
{
p->next=p2;
p2=p2->next;
}
else
{
p->next=p1;
p1=p1->next;
}
p=p->next;
}
if(p1==nullptr)p->next=p2;
else if(p2==nullptr)p->next=p1;//当一个为空时直接连在不空的指针上
return pr;
}