Merge k sorted linked lists and return it as one sorted list.
Analyze and describe its complexity.
Example
Given lists:
[
2->4->null,
null,
-1->null
],
return -1->2->4->null
.
/**
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
struct OrderByNode
{
bool operator() (const ListNode* n1, const ListNode* n2)
{
return n1->val >= n2->val;
}
};
public:
/**
* @param lists: a list of ListNode
* @return: The head of one sorted list.
*/
ListNode *mergeKLists(vector<ListNode *> &lists) {
// write your code here
if (lists.size() == 0)
return NULL;
priority_queue<ListNode*, vector<ListNode*>, OrderByNode> auxQueue;
for (int i=0; i<lists.size(); i++)
{
if (lists[i] != NULL)
auxQueue.push(lists[i]);
}
ListNode dummyHeader(0);
ListNode *pCurNode = &dummyHeader;
while (auxQueue.size())
{
ListNode* selectedNode = auxQueue.top();
auxQueue.pop();
if (selectedNode->next)
{
auxQueue.push(selectedNode->next);
}
pCurNode->next = selectedNode;
pCurNode = pCurNode->next;
}
return dummyHeader.next;
}
};