解答:
方法一:合并前两个链表,然后插入到后面,循环到只剩一个链表
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辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。