【LeetCode-23】合并K个升序链表
问题
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例
输入: lists = [[1,4,5],[1,3,4],[2,6]]
输出: [1,1,2,3,4,4,5,6]
解答1:归并排序
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if (lists.empty()) return nullptr;
return merge(lists, 0, lists.size() - 1);
}
private:
ListNode* merge(vector<ListNode*>& lists, int start, int end) {
if (start == end) return lists[end];
int mid = (start + end) / 2;
return merge2Lists(merge(lists, start, mid), merge(lists, mid + 1, end));
}
ListNode* merge2Lists(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
if (l1->val > l2->val) {
l2->next = merge2Lists(l1, l2->next);
return l2;
} else {
l1->next = merge2Lists(l1->next, l2);
return l1;
}
}
};
重点思路
归并排序非常适合链表的排序,本题是已经拆分好了的链表,还省下了拆分链表的操作。