
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL&&pHead2==NULL)
return NULL;
if(pHead1==NULL)
return pHead2;
if(pHead2==NULL)
return pHead1;
ListNode* Head1=pHead1;
ListNode* Head2=pHead2;
ListNode* pNewHead=NULL;
ListNode* pNewTail=NULL;
if(Head1->val < Head2->val)
{
pNewHead=Head1;
Head1=Head1->next;
}
else
{
pNewHead=Head2;
Head2=pHead2->next;
}
pNewTail=pNewHead;
while(Head1 && Head2)
{
if(Head1->val < Head2->val)
{
pNewTail->next=Head1;
Head1=Head1->next;
}
else
{
pNewTail->next=Head2;
Head2=Head2->next;
}
pNewTail=pNewTail->next;
}
if(Head1==NULL)
{
pNewTail->next=Head2;
}
else
{
pNewTail->next=Head1;
}
return pNewHead;
}
};