简简单单优先队列
class Solution {
public:
struct Node
{
int id,val;
ListNode * p;
bool operator < (const Node & a) const{
return val > a.val;
}
};
ListNode * append(int x,ListNode *tail)
{
ListNode *tmp = new ListNode(x);
tail -> next = tmp;
return tmp;
}
ListNode *mergeKLists(vector<ListNode *> &lists) {
ListNode *head = new ListNode(0),*tail = head;
priority_queue<Node> pq;
for(int i=0;i<lists.size();i++) if(lists[i])
pq.push(Node{i,lists[i] -> val,lists[i]});
while(!pq.empty())
{
Node tmp = pq.top();pq.pop();
tail = append(tmp.val,tail);
if(tmp.p -> next) pq.push(Node{tmp.id,tmp.p->next->val,tmp.p->next});
}
return head -> next;
}
}; 
京公网安备 11010502036488号