min heap用priority que实现 注意判断list数组是否为空等
这里的trick是pop一个node之后 不用想记录他是哪个list出来的 因为可以用next指针找到!!
public class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode node = null;
if ( lists == null || lists.length == 0 )
return node;
ListNode dummy = new ListNode ( 0 );
ListNode cur = dummy;
PriorityQueue<ListNode> que = new PriorityQueue<ListNode> ( lists.length, new Comparator<ListNode>(){
@Override
public int compare ( ListNode node1, ListNode node2 ){
return node1.val - node2.val;
}
});
for ( ListNode temp : lists ){
if ( temp != null )
que.add ( temp );
}
while ( !que.isEmpty() ){
ListNode temp = que.poll();
cur.next = temp;
cur = cur.next;
if ( cur.next != null )
que.add ( cur.next );
}
return dummy.next;
}
}

本文介绍了一种利用PriorityQueue数据结构来合并K个已排序链表的方法。通过自定义比较器,该算法能高效地找出最小节点并构建最终的排序链表。文章提供了完整的Java代码实现。
235

被折叠的 条评论
为什么被折叠?



