目录
一,题目描述
英文描述
You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
中文描述
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例与说明
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二,解题思路
链表已经排好序了,只需要将他们合并即可,也就是归并排序中的多路合并,可以借助优先队列(小根堆)来选择每轮中的最小节点。
三,AC代码
Java
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
// 创建小根堆
PriorityQueue<ListNode> heap = new PriorityQueue<>(new Comparator<ListNode>() {
public int compare(ListNode a, ListNode b) {
return a.val - b.val;
}
});
for (int i = 0; i < lists.length; i++) {
if (lists[i] != null) {
heap.offer(lists[i]);
}
}
ListNode head = new ListNode(), p = head;
while (!heap.isEmpty()) {
ListNode node = heap.peek();
heap.poll();
if (node.next != null) {
heap.offer(node.next);
}
p.next = node;
p = p.next;
}
return head.next;
}
}
四,解题过程
第一搏
一发如魂。优先队列直接用现成的话,基本没什么难度了。