美文网首页
Leetcode23-合并K个排序链表(未完成)

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

作者: 小豆oo | 来源:发表于2019-01-12 21:27 被阅读0次

    题目:合并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趟

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

    待补充
    

    相关文章

      网友评论

          本文标题:Leetcode23-合并K个排序链表(未完成)

          本文链接:https://www.haomeiwen.com/subject/ngxhdqtx.html