题目:输入两个递增排序的链表,合并这两个链表使新链表仍然是递增排序的。
题目还算简单,就是要考虑的特殊情况挺多的。代码如下:
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)
return pHead2;
if(pHead2==NULL)
return pHead1;
ListNode *newpre=new ListNode(0);
ListNode *current=newpre;
int val1,val2;
while(pHead1||pHead2)
{
val1=pHead1==NULL?INT_MAX:pHead1->val;
val2=pHead2==NULL?INT_MAX:pHead2->val;
if(val1<val2)
{
current->next=pHead1;
pHead1=pHead1->next;
}
else
{
current->next=pHead2;
pHead2=pHead2->next;
}
current=current->next;
}
current->next=NULL;
ListNode *newhead=newpre->next;
newpre->next=NULL;
delete newpre;
return newhead;
}
};
看了下作者在书中写的示例代码,采用递归的方式实现,方便简洁。代码如下:
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
else if(pHead2==NULL)
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;
}
};