做茶叶网站的目的和规划,网站宣传推广平台,岳阳网站设计u,公司管理系统软件有哪些给定一个链表数组#xff0c;每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中#xff0c;返回合并后的链表。 输入#xff1a;lists [[1,4,5],[1,3,4],[2,6]]
输出#xff1a;[1,1,2,3,4,4,5,6]
解释#xff1a;链表数组如下#xff1a;
[1-4-5,1… 给定一个链表数组每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中返回合并后的链表。 输入lists [[1,4,5],[1,3,4],[2,6]]
输出[1,1,2,3,4,4,5,6]
解释链表数组如下
[1-4-5,1-3-4,2-6
]
将它们合并到一个有序链表中得到。
1-1-2-3-4-4-5-6 这道题看似困难题其实还是比较容易好想的我们可以维护一个优先最小队列然后声明一个虚拟头结点每次出一个最小的节点挂载在已经挂载节点的后面当队列为空时就说明我们K个升序列表已经合并完成 public ListNode mergeKLists(ListNode[] lists) {if(listsnull||lists.length0){return null;}//自定义比较器PriorityQueueListNode queuenew PriorityQueue(new ComparatorListNode() {Overridepublic int compare(ListNode o1, ListNode o2) {return o1.val-o2.val;}});//将K个节点的头结点入队for(ListNode node:lists){if(node!null){queue.offer(node);}}//创建一个虚拟头结点ListNode dummyNodenew ListNode(-1);ListNode curNodedummyNode;while(!queue.isEmpty()){ListNode curqueue.poll();curNode.nextcur;//更新curNodecurNodecurNode.next;//如果当前节点的next不为空则让下一个节点进行入队if(cur.next!null){queue.offer(cur.next);}}return dummyNode.next;}