注意:
链表默认没有头节点,第一个节点就有值。
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;
}