解答:
方法一:合并前兩個鏈表,然后插入到后面,循環(huán)到只剩一個鏈表
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,共進行l(wèi)ogk趟
待補充
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。