【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;
        }
    }
};

重点思路

归并排序非常适合链表的排序,本题是已经拆分好了的链表,还省下了拆分链表的操作。

posted @ 2021-03-27 12:02  tmpUser  阅读(37)  评论(0编辑  收藏  举报