[各种面试题] 合并k个排序链表

思路是用一个优先队列,给它自定义一个排序函数即可。

/*链表结点的定义(请不要在代码中定义该类型)
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 &lists) {
	if ( lists.empty() )
		return NULL;
	ListNode guard;
	ListNode* tail=&guard;
	priority_queue,compare> Q;
	for(int i=0;inext=t;
		tail=tail->next;
		Q.push(t->next);
	}
	return guard.next;
}


你可能感兴趣的:(各种面试题)