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

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


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

待补充
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,671评论 0 13
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,340评论 0 52
  • 早上去上早读,儿子吹风扇好蹬被子,只能把被子中间盖在他身上,这样他往哪边滚都能裹着被子的边缘,其实这也并不绝...
    深海碧玉阅读 1,375评论 0 1
  • 早晨四点多醒来,收拾好来到火车站,要坐五点二十的车去太原,结果晚点了一个多小时,在休息区看到很多学生,他们应该起的...
    处处1阅读 399评论 0 1
  • 古人写儿童的古诗算比较少,但无一例外的,小儿都是一群可爱的精灵:有专注钓鱼、怕得鱼惊不应人的蓬头稚子;有一放早学,...
    停云听风阅读 390评论 4 5

友情链接更多精彩内容