注意:
链表默认没有头节点,第一个节点就有值。
C/C++代码
# include <iostream>
# include <vector>
using namespace std;
struct listnode {
int val;
listnode *next;
listnode(int x) : val(x), next(nullptr) {}
};
class Solution {
public:
listnode *build_linklist(vector<int> &nums) {
if (nums.empty())
return nullptr;
int n = nums.size();
listnode *head = new listnode(nums[0]);
listnode *pre = head;
for (int i = 1; i < n; i++) {
listnode *temp = new listnode(nums[i]);
pre->next = temp;
pre = pre->next;
}
return head;
}
void print_linklist(listnode *head) {
if (!head)
return;
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
listnode *merge_linklist(listnode *a, listnode *b) {
if (!a)
return b;
if (!b)
return a;
listnode *head, *temp;
if (a->val <= b->val) {
head = a;
a = a->next;
} else {
head = b;
b = b->next;
}
listnode *p = head;
while (a && b) {
if (a->val <= b->val) {
temp = a;
a = a->next;
} else {
temp = b;
b = b->next;
}
p->next = temp;
p = p->next;
}
if (a)
p->next = a;
if (b)
p->next = b;
return head;
}
};
int main() {
vector<int> a = {1, 4, 8, 9};
vector<int> b = {2, 3, 5, 10};
Solution s;
listnode *head_a = s.build_linklist(a);
listnode *head_b = s.build_linklist(b);
s.print_linklist(head_a);
s.print_linklist(head_b);
listnode *head_merge = s.merge_linklist(head_a, head_b);
s.print_linklist(head_merge);
return 0;
}