Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
ListNode* ret = NULL;
ListNode** cur = &ret;
int val = 0;
while(getNextVal(lists, val))
{
*cur = new ListNode(val);
cur = &((*cur)->next);
}
return ret;
}
bool getNextVal(vector<ListNode*>& lists, int& ret)
{
bool flag = false;
int minIdx = 0;
int idx = -1;
while(++idx < lists.size() && NULL == lists[idx]);
if(idx < lists.size())
{
ret = lists[idx]->val;
flag = true;
minIdx = idx++;
}
for(int i = idx; i < lists.size(); ++i)
{
if(NULL != lists[i] && lists[i]->val < ret)
{
ret = lists[i]->val;
minIdx = i;
}
}
if(flag)
lists[minIdx] = lists[minIdx]->next;
return flag;
}
};