非递归版
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(!pHead1)
return pHead2;
if(!pHead2)
return pHead1;
ListNode* p1=pHead1;
ListNode* p2=pHead2;
ListNode* pNewHead = NULL;
ListNode* pre = NULL;
if(p1->val>=p2->val)
{
pNewHead = p2;
p2=p2->next;
}
else
{
pNewHead = p1;
p1=p1->next;
}
pre = pNewHead;
while(p1&&p2)
{
if(p1->val>=p2->val)
{
pre->next=p2;
pre=p2;
p2=p2->next;
}
else
{
pre->next=p1;
pre=p1;
p1=p1->next;
}
}
if(p1)
pre->next = p1;
if(p2)
pre->next = p2;
return pNewHead;
}
递归版
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(!pHead1)
return pHead2;
if(!pHead2)
return pHead1;
ListNode* newHead=NULL;
if(pHead1->val<=pHead2->val)
{
newHead = pHead1;
newHead->next = Merge(pHead1->next, pHead2);
}
else
{
newHead = pHead2;
newHead->next = Merge(pHead1, pHead2->next);
}
return newHead;
}