题目
思路
把k个链表合并的大问题看成每次两个链表的合并的小问题,这样问题就变成了合并两个链表了。(想法美丽,现实残酷,后面才知道时间复杂度过不了,裂开了大家有没有更好的想法,欢迎讨论讨论)
代码:
struct ListNode *CreateNode(int val){
struct ListNode *temp=(struct ListNode *)malloc(sizeof(struct ListNode));
temp->val=val;
temp->next=NULL;
return temp;
}
struct ListNode* sortListNode(struct ListNode *head1,struct ListNode *head2){
struct ListNode *p1=head1;
struct ListNode *p2=head2;
struct ListNode *p=CreateNode(0);
struct ListNode *res=p;
while(p1!=NULL&&p2!=NULL){
if(p1->val<p2->val){
p->next=CreateNode(p1->val);
p1=p1->next;
}else{
p->next=CreateNode(p2->val);
p2=p2->next;
}
p=p->next;
}
while(p1!=NULL){
p->next=CreateNode(p1->val);
p1=p1->next;
p=p->next;
}
while(p2!=NULL){
p->next=CreateNode(p2->val);
p2=p2->next;
p=p->next;
}
return res->next;
}
struct ListNode* mergeKLists(struct ListNode** lists, int listsSize) {
if (listsSize == 0) return NULL;
struct ListNode *res=lists[0];
for(int i=1;i<listsSize;i++){
struct ListNode *t=lists[i];
res=sortListNode(t,res);
}
return res;
}
反思:
只会暴力啊啊啊啊啊
谁来帮帮我