### 解题思路
首先将每个链表的头节点加入优先队列,然后依次将优先队列的头节点拼接到新的链表头上去,并将该头节点的下一个节点加入优先队列(要注意判断空节点)
### 代码
class Solution {
public:
typedef pair<int,int> PII;
priority_queue <PII,vector<PII>,greater<PII>> q;
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.size() == 0) return nullptr;
ListNode* sentry = new ListNode(-1); //哨兵节点
ListNode* sentryHead = sentry;
for(int i = 0; i < lists.size();++i) if(lists[i]) q.push({lists[i]->val,i});
while(q.size()){
auto cur = q.top();
q.pop();
auto c = lists[cur.second]->next;
sentry = sentry->next = lists[cur.second];
lists[cur.second] = c;
if(lists[cur.second]) q.push({lists[cur.second]->val,cur.second});
}
return sentryHead->next;
}
};