解答:
方法一:合并前两个链表,然后插入到后面,循环到只剩一个链表
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趟
待补充
网友评论