題目描述
輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。
類似於歸併排序的歸併過程,思路是每次在鏈表的尾部插入較小的元素。
也可以考慮用遞歸的方法寫,比較簡便。
#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;
}