用了数据库中学的方法。
由于每个list都是排好序的,所以就比较每个list开头的数,拿出最小的数push入结果,push完之后扔掉这个数(指针指向下一个数)。循环直至当最小的数为256。(即tmp没有发生改变,没有需要排序的数了)
时间复杂为O(vector长度*最长lists)(是NlogN吗,这个不太懂)。
class Solution {
public:
/**
* @param lists: a list of ListNode
* @return: The head of one sorted list.
*/
ListNode* mergeKLists(vector<ListNode *> &lists ) {
// write your code here
ListNode* head=NULL;
ListNode* last=NULL;
vector<ListNode *>::iterator p,record;
int tmp;
while(1){
tmp=256;
for(p=lists.begin();p<lists.end();p++){
if(!(*p)){
continue;
}
if((*p)->val<tmp){
tmp=(*p)->val;
record=p;
}
}
if(tmp==256)
break;
ListNode*node=new ListNode(tmp);
if(!head){
head=node;
last=node;
}
else{
last->next=node;
last=node;
}
*record=(*record)->next;
}
return head;
}
};