输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
1.第一种方法(常规方法)
/*
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 *past=NULL,*res=NULL;
while(pHead1!=NULL&&pHead2!=NULL)
{
if(pHead1->val<=pHead2->val){
if(res==NULL)
{res=past=pHead1;
pHead1=pHead1->next;}
else{
past->next=pHead1;
past=past->next;
pHead1=pHead1->next;
}
}
else{
if(res==NULL)
{
res=past=pHead2;
pHead2=pHead2->next;}
else{
past->next=pHead2;
past=past->next;
pHead2=pHead2->next;
}
}
}
if(pHead1!=NULL)
past->next=pHead1;
if(pHead2!=NULL)
past->next=pHead2;
return res;
}
};
2.递归方法
/*
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;
if(pHead1->val<=pHead2->val){
pHead1->next=Merge(pHead1->next,pHead2);
return pHead1;
}
else{
pHead2->next=Merge(pHead1,pHead2->next);
return pHead2;
}
}
};