方法一:递归
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
if(pHead1 == NULL || pHead2 == NULL)
return pHead1 != NULL ? pHead1 : pHead2;
if(pHead1->val < pHead2->val){
pHead1->next = Merge(pHead1->next, pHead2);
return pHead1;
}
else{
pHead2->next = Merge(pHead1, pHead2->next);
return pHead2;
}
}
};
方法二:尾插
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
if(pHead1 == NULL || pHead2 == NULL)
return pHead1 != NULL ? pHead1 : pHead2;
ListNode* tmp = new ListNode(0);
ListNode* newp =tmp;
while(pHead1 && pHead2){
if(pHead1->val < pHead2->val){
tmp->next = pHead1;
pHead1 = pHead1->next;
}
else{
tmp->next = pHead2;
pHead2 = pHead2->next;
}
tmp = tmp->next;
if(pHead1)
tmp->next = pHead1;
if(pHead2)
tmp->next = pHead2;
}
newp = newp->next;
return newp;
}
};
完整代码
#include <iostream>
using namespace std;
struct ListNode {
int val;
struct ListNode* next;
};
int main()
{
ListNode *head1, *head2;
head1 = new ListNode;
head2 = new ListNode;
head1->next = NULL;
head2->next = NULL;
ListNode* p = head1;
ListNode* q = head2;
int input1;
cout << "请输入链表1:" << endl;
while(cin >> input1){
ListNode* tmp = new ListNode;
tmp->val = input1;
tmp->next = head1->next;
head1->next = tmp;
head1 = head1->next;
if(cin.get() == '\n')
break;
}
p = p->next;
int input2;
cout << "请输入链表2:" << endl;
while(cin >> input2){
ListNode* tmp = new ListNode;
tmp->val = input2;
tmp->next = head2->next;
head2->next = tmp;
head2 = head2->next;
if(cin.get() == '\n')
break;
}
q = q->next;
ListNode* r = new ListNode;
r->next = NULL;
ListNode* res = r;
if(p == NULL || q == NULL)
r->next = p == NULL ? q : p;
else{
while(p && q){
if(p->val > q->val){
r->next = q;
q = q->next;
r = r->next;
}
else{
r->next = p;
p = p->next;
r = r->next;
}
}
r->next = p == NULL ? q : p;
}
res = res->next;
while(res){
cout << res->val << " ";
res= res->next;
}
return 0;
}