思路是用一个优先队列,给它自定义一个排序函数即可。
/*链表结点的定义(请不要在代码中定义该类型)
struct ListNode {
int val;
ListNode *next;
};
*/
//lists包含k个链表的头结点,返回合并后链表头结点
const int INT_MAX=2147483647;
class compare
{
public:
bool operator()(ListNode* n1,ListNode* n2)const
{
if ( !n1 || !n2)
return !n1;
return n1->val>n2->val;
}
};
ListNode* merge(vector<ListNode*> &lists) {
if ( lists.empty() )
return NULL;
ListNode guard;
ListNode* tail=&guard;
priority_queue<ListNode*,vector<ListNode*>,compare> Q;
for(int i=0;i<lists.size();i++)
Q.push(lists[i]);
while(!Q.empty()&&Q.top()!=NULL)
{
ListNode* t=Q.top();
Q.pop();
tail->next=t;
tail=tail->next;
Q.push(t->next);
}
return guard.next;
}