# 题目

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

# 思路

可以维护一个新的链表,将链表数组中的链表分别取出合并进新的链表中,最后获得合并后的链表。

# 题解

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* a, ListNode* b) {
        if (a == nullptr) return b;
        if (b == nullptr) return a;
        ListNode head, *result = &head;
        while(a != nullptr && b != nullptr) {
            if (a->val < b->val) {
                result->next = a;
                a = a->next;
            } else {
                result->next = b;
                b = b->next;
            }
            result = result->next;
        }
        result->next = a == nullptr ? b : a;
        return head.next;
    }
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        ListNode* result = nullptr;
        for (ListNode* list:lists) result = mergeTwoLists(result, list);
        return result;
    }
};
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

chaorun liu 微信支付

微信支付

chaorun liu 支付宝

支付宝