LeetCode笔记汇总
题目
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
思路
先考虑特殊情况,当传入的lists中没有链表,即lists.length()==0 时,直接返回null
当非空时,用容量为K的优先队列存储每个链表中的头节点,然后将队列中的最小元素出列,加入到结果链表中,再将出列链表的下一个元素加入到队列之中,即pq.add(list)
最后返回结果链表,这里需要使用到虚拟头节点dummy以及一个指针curr来将节点添加到链表中。
代码
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if (lists.length == 0) {
return null;
}
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
PriorityQueue<ListNode> pq = new PriorityQueue<>(new Comparator<ListNode>() {
@Override
public int compare(ListNode o1, ListNode o2) {
return o1.val - o2.val;
}
});
for (ListNode list : lists) {
if(list != null){
pq.add(list);
}
}
while (!pq.isEmpty()) {
ListNode nextNode = pq.poll();
curr.next = nextNode;
curr = curr.next;
if (nextNode.next != null) {
pq.add(nextNode.next);
}
}
return dummy.next;
}
}