题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
类似于归并排序的归并过程,思路是每次在链表的尾部插入较小的元素。
也可以考虑用递归的方法写,比较简便。
#include <iostream>
#include <string>
#include <memory>
#include <vector>
#include<cmath>
#include<stack>
#include<algorithm>
using namespace std;
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode* res;
ListNode* tail=new ListNode(-1);
res=tail;
while (pHead1!=NULL&&pHead2!=NULL)
{
if(pHead1->val<pHead2->val) {
ListNode* temp=new ListNode(pHead1->val);
pHead1=pHead1->next;
tail->next=temp;
tail=tail->next;
} else {
ListNode* temp=new ListNode(pHead2->val);
pHead2=pHead2->next;
tail->next=temp;
tail=tail->next;
}
}
if(pHead1!=NULL) {
tail->next=pHead1;
}
if(pHead2!=NULL) {
tail->next=pHead2;
}
return res->next;
}
};
int main() {
Solution sol;
ListNode* test1=new ListNode(2);
test1->next=new ListNode(4);
ListNode* test2=new ListNode(1);
test2->next=new ListNode(3);
ListNode* res=sol.Merge(test1,NULL);
system("pause");
return 0;
}