return dummy->next;
}
};
// Proper solution
class Solution {
typedef pair<int, int> pii;
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
ListNode *dummy, *tmp;
tmp = dummy = new ListNode;
auto cmp = [](const pii &a, const pii &b) { return a.first > b.first; };
priority_queue<pii, vector<pii>, decltype(cmp)> pq(cmp);
for (int i = 0; i < lists.size(); i++)
if (lists[i]) pq.push({lists[i]->val, i});
while (!pq.empty()) {
int index = pq.top().second;
pq.pop();
ListNode *t = lists[index];
lists[index] = lists[index]->next;
if (lists[index]) pq.push({lists[index]->val, index});
tmp = tmp->next = t;
}
return dummy->next;
}
};