# 题目
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
# 思路
可以维护一个新的链表,将链表数组中的链表分别取出合并进新的链表中,最后获得合并后的链表。
# 题解
/** | |
* 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; | |
} | |
}; |