题目描述

菜鸡解法
之前做过合并排序的两个链表,这道题从两个变成K个,于是想着先合并两个,再用合并过的和下一个合并,其实还没写就知道复杂度太高,但还是硬着头皮写了下来,运行,果然,击败百分之二十,菜
ListNode* mergeKLists(vector<ListNode*>& lists) {
int k = lists.size();
if(k==0) return nullptr;
if(k==1) return lists[0];
ListNode *node = new ListNode(INT_MIN);
merge(lists,k,node);
return node->next;
}
void merge(vector<ListNode*>& lists,int k,ListNode *&head1){
if(k==0) return;
merge(lists,k-1,head1);
ListNode *head2 = lists[k-1];
ListNode *cur = head1;
head1 = head1->next;
ListNode *Head = cur;
while(head1 && head2){
if(head1->val<=head2->val){
cur->next = head1;
head1 = head1->next;
}else{
cur->next = head2;
head2 = head2->next;
}
cur = cur->next;
}
cur->next = head1?head1:head2;
head1 = Head;
return;
}