题目描述
N个升序链表合并为一个升序的链表
我的答案
import java.util.Scanner;
class Node{
int val;
Node next;
public Node(int val){
this.val = val;
}
}
public class Main {
private PriorityQueue<Node> minHeap;
public Node mergeList(List<Node> nodes){
// 定义小根堆,size为序列个数
minHeap = new PriorityQueue<>(nodes.size(), new Comparator<Node>(){
public int compare(Node node1, Node node2){
return node1.val - node2.val;
}
});
// 初始化,将链表头存入小根堆
for(Node node : nodes){
minHeap.offer(node);
}
// 合并
return mergeList(minHeap);
}
public Node mergeList(PriorityQueue<Node> minHeap){
// 递归结束条件 小根堆为空,没有元素。
if(minHeap.isEmpty()) return null;
// 每次把堆顶的元素poll出来,因为他最小
Node node = minHeap.poll();
// 如果这个元素不是链表尾,就把这个元素的next加入小根堆
if(node.next != null) minHeap.offer(node.next);
// 该元素的next修正为小根堆合并后的结果
node.next = mergeList(minHeap);
// 返回当前元素
return node;
}
}