【发布时间】:2015-03-09 05:17:02
【问题描述】:
合并 k 个排序的链表并将其作为一个排序列表返回。分析并描述其复杂性。
我的代码:
ListNode *mergeTwoLists(ListNode *p1, ListNode *p2) {
ListNode dummy(-1);
ListNode *head = &dummy;
while(p1 != nullptr && p2 != nullptr) {
if (p1->val < p2->val) {
head->next = p1;
head = head->next;
p1 = p1->next;
} else {
head->next = p2;
head = head->next;
p2 = p2->next;
}
}
if (p1 != nullptr) {
head->next = p1;
}
if (p2 != nullptr) {
head->next = p2;
}
//head->next = nullptr;
return dummy.next;
}
ListNode *mergeKLists(vector<ListNode *> &lists) {
if (lists.size() == 0) return nullptr;
if (lists.size() == 1) return lists[0];
ListNode *p1, *p2, *p;
while (lists.size() > 1) {
p1 = lists.back();
lists.pop_back();
p2 = lists.back();
lists.pop_back();
p = mergeTwoLists(p1, p2);
lists.push_back(p);
}
return lists[0];
}
我总是超过时间限制。我应该如何更改程序?
【问题讨论】:
-
这是一个标准问题,您只需 google 即可获得答案。另外我怀疑这已经在stackoverflow上问过了,所以你也可以在这里搜索。我仍然给出了广泛的想法,希望它有所帮助。
-
@sasha 谢谢。我使用
lists.insert(lists.begin(), p)更改我的代码。之前在stackoverflow中搜索过,可能是我粗心,我会努力改掉那个坏习惯。谢谢!