Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
這道題是讓合並兩個有序鏈表。增設一個頭結點。下面貼上代碼:
#include
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* create(){
int num;
cout << "請輸入個數:";
cin >> num;
ListNode* head = new ListNode(0);
ListNode* first = head;
for (int i = 0; i < num; i++){
int n;
cin >> n;
ListNode* newNode = new ListNode(n);
head->next = newNode;
head = newNode;
}
return first->next;
}
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
ListNode* h1 = l1;
ListNode* h2 = l2;
ListNode* ans = new ListNode(0);
ListNode* l3 = ans;
while (h1&&h2){
if (h1->val <= h2->val){
ans->next = h1;
ans = h1;
h1 = h1->next;
}
else{
ans->next = h2;
ans = h2;
h2 = h2->next;
}
}
ans->next = h1 ? h1 : h2;
return l3->next;
}
};
int main(){
Solution s;
ListNode* l1 = s.create();
ListNode* l2 = s.create();
ListNode* l3 = s.mergeTwoLists(l1, l2);
while (l3){
cout << l3->val << " ";
l3 = l3->next;
}
cout << endl;
return 0;
}
附加了鏈表的建立以便測試。