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