Leetcode23-合并K个排序链表(未完成)

2019-01-12  本文已影响0人  小豆oo

题目:合并K个排序链表

解答:

方法一:合并前两个链表,然后插入到后面,循环到只剩一个链表

ListNode* mergeKLists(vector<ListNode*>& lists) {
        if(lists.empty())
        {
            return nullptr;
        }
        while(lists.size()>1)
        {
            lists.push_back(mergeTwoLists(lists[0],lists[1]));
            lists.erase(lists.begin());
            lists.erase(lists.begin());
        }
        return lists.front();
    }
    ListNode* mergeTwoLists(ListNode* l1,ListNode* l2)
    {
        if(l1 == nullptr) return l2;
        if(l2 == nullptr) return l1;
        ListNode* head = nullptr;
        if(l1->val > l2->val)
        {
            head = l2;
            l2 = l2->next;
        }else{
            head = l1;
            l1 = l1->next;
        }
        ListNode* p = head;
        while(l1!=nullptr && l2!=nullptr)
        {
            if(l1->val > l2->val)
            {
                p->next = l2;
                l2 = l2->next;
            }else{
                p->next = l1;
                l1 = l1->next;
            }
            p = p->next;
        }
        p->next = l1 ? l1 : l2;
        return head;
    }

时间复杂度:nlogk;空间复杂度:n//先插入新链表再删除旧链表-最坏是只有两个链表

注:时间复杂度分析——每一趟合并的时间复杂度是n,共进行logk趟

方法二:利用优先队列或堆

待补充
上一篇 下一篇

猜你喜欢

热点阅读