解答:
方法一:合并前兩個鏈表,然后插入到后面,循環到只剩一個鏈表
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趟
待補充
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。