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==nullptr &&pHead2==nullptr)
return nullptr;
if(pHead1==nullptr)
return pHead2;
if(pHead2==nullptr)
return pHead1;
//开始递归求 //要定义一个辅助的量 将排好序的放在里面
ListNode* pMergehead=nullptr;//归并后的
if(pHead1->val<=pHead2->val) ;
{
pMergehead=pHead1;
pMergehead->next= Merge(pHead1->next,pHead2);//递归一般都于高向低 内部
}
else {
pMergehead=pHead2;
pMergehead->next= Merge(pHead1,pHead2->next);
}
return pMergehead;
}
};
2. 非递归 注意顺序 将==NULL放在最后, 满足的也是一开始就进去了!!!
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)//两个链表长度不一样
{
//新建一个头节点,用来存合并的链表。
ListNode * head=new ListNode(-1);
head->next=NULL;
ListNode * root=head;
while(pHead1!=NULL&&pHead2!=NULL){//都不为null
if(pHead1->val<pHead2->val){
head->next=pHead1;
head=head->next;
pHead1=pHead1->next;
}else{
head->next=pHead2;
head=head->next;
pHead2=pHead2->next;
}
}
//把未结束的链表连接到合并后的链表尾部
if(pHead1!=NULL){
head->next=pHead1;
}
if(pHead2!=NULL){
head->next=pHead2;
}
return root->next;
}
};