【leetcode】23 合并K个排序链表(链表,分治)

题目链接:https://leetcode-cn.com/problems/merge-k-sorted-lists/

题目描述

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

输入:
[
  1->4->5,
  1->3->4,
  2->6
]
输出: 1->1->2->3->4->4->5->6

思路

1 逐一两两合并有序链表

将合并 k 个链表的问题转化成合并 2 个链表 k-1 次。这里是 21 合并两个有序链表 的题目。

class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        ListNode *head = nullptr;
        if(lists.empty()) return head;
        for (auto list:lists) {
            head = mergeTwoLists(head, list);
        }
        return head;
    }

    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(l1 == nullptr) return l2;
        if(l2 == nullptr) return l1;
        if(l1->val < l2->val){
            l1->next = mergeTwoLists(l1->next, l2);
            return l1;
        }else{
            l2->next = mergeTwoLists(l1, l2->next);
            return l2;
        }
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zjwreal/article/details/92390204
今日推荐