Monday, November 25, 2013

LeetCode Problem : Merge k Sorted Lists

Problem

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Code

class comp
{
public:
    bool operator()(ListNode *l1,ListNode *l2)
    {
        return (l1->val > l2->val);
    }
};

class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
    // Note: The Solution object is instantiated only once and is reused by each test case.
    priority_queue<ListNode *,vector<ListNode *>,comp> Q;
    vector<ListNode *>::const_iterator it = lists.begin();
    for(;it != lists.end();++it){
        ListNode *phead = *it;
        if(phead != 0)
        Q.push(*it);
    }
    if(Q.empty())
        return 0;
    ListNode *head = Q.top();
    Q.pop();
    if(head->next)
    Q.push(head->next);
    ListNode *node = head;
    while(!Q.empty()){
        ListNode *tmp = Q.top();
        Q.pop();
        node->next = tmp;
        if(tmp->next)
            Q.push(tmp->next);
        node = tmp;
    }
    node->next = 0;
    return head;
}
};

No comments:

Post a Comment