题目
Merge k sortedlinked lists and return it as one sorted list. Analyze and describe itscomplexity.
每次扫描各个链的头,寻找最小,在结果中插入该值,指针向后。
如果各个链的长度相差较大,可以在一个链结束后删除相应的指针项,从而提高效率,保证O(n)。实际测试用例中没有发现这样比较极端的情况。
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
const int MAX=0x7fffffff;
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
int size=lists.size();
ListNode *head=NULL,*p1;
int i;
int min_id=0,min; //值最小的list的编号,最小的值
while(min_id>=0)
{
min_id=-1;
min=MAX;
for(i=0;i<size;i++)
{
if(lists[i]!=NULL&&lists[i]->val<min)
{
min_id=i;
min=lists[i]->val;
}
}
if(min_id>=0)
{
if(head!=NULL)
{
p1->next=new ListNode(min);
p1=p1->next;
}
else
{
head=new ListNode(min);
p1=head;
}
lists[min_id]=lists[min_id]->next;
}
}
return head;
}
};