Wednesday, December 17, 2014

Merge k Sorted Lists

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

T:
Use a min-heap.

A:


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    struct compare {
        bool operator () (ListNode * & p1, ListNode * & p2) {
            return p1->val > p2->val;
        }
    };
    ListNode *mergeKLists(vector< ListNode * > &lists) {
        ListNode dummy(0);
        priority_queue< ListNode*, vector< ListNode* >, compare > qu;
        for(int i=0; i < lists.size(); i++) {
            if(lists[i] != NULL) {
                qu.push(lists[i]);
            }
        }
        ListNode * p = &dummy;
        while(!qu.empty()) {
            p->next = qu.top();
            qu.pop();
            p = p->next;
            if(p->next) {
                qu.push(p->next);
            }
        }
        return dummy.next;
    }
};

No comments:

Post a Comment