23.合并k个有序链表
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
class Solution { public ListNode mergeKLists(ListNode[] lists) { if(lists.length==0) return null; ListNode dump = new ListNode(-1); ListNode p = dump; //获得最小二叉堆 PriorityQueue<ListNode> pq = new PriorityQueue<>(lists.length,(a,b)->(a.val-b.val)); // 将 k 个链表的头结点加入最小堆 for(ListNode head:lists){ if(head!=null){ pq.add(head); } } while(!pq.isEmpty()){ // 获取最小节点,接到结果链表中 ListNode node = pq.poll(); p.next =node; if(node.next!=null){ pq.add(node.next); } p=p.next; } return dump.next; } }