深圳市住房建设局官方网站,旅游最适合的城市,色see琪琪电影院,阳东网站seo思路
1、直接全部放入集合中#xff0c;然后排序#xff0c;在进行构造节点返回
2、使用归并排序的方式#xff0c;两两排序合并#xff0c;最后合并大的。
3、第三中思路就比较巧妙了#xff0c;可以使用小根堆#xff0c;每次弹出堆顶#xff0c;最小值#xff0c…
思路
1、直接全部放入集合中然后排序在进行构造节点返回
2、使用归并排序的方式两两排序合并最后合并大的。
3、第三中思路就比较巧妙了可以使用小根堆每次弹出堆顶最小值然后弹出后当前链表指向下一个节点再压入堆中。如此反复。代码如下 public ListNode mergeKLists(ListNode[] lists) {if (listsnull||lists.length0){return null;}//设置一个优先队列PriorityQueueListNode heap new PriorityQueue((o1, o2) - o1.val - o2.val);//将所有节点放入 heapfor (ListNode listNode:lists){if (listNode!null){heap.add(listNode);}}if (heap.isEmpty()) {return null;}//弹出第一个节点ListNode head heap.poll();//记录每次弹出的节点ListNode prehead;//放入最小节点下一个节点if (pre.next!null){heap.add(pre.next);}//循环比较while (!heap.isEmpty()){//弹出最小节点ListNode cur heap.poll();//移动pre指针pre.nextcur;//在移动pre节点precur;//最小节点下一个节点入队if (pre.next!null){heap.add(pre.next);}}return head;}
}