【Java语言】力扣系列----23. 合并K个排序链表

    技术2022-07-14  74

    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

    示例:

    输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6

    具体代码实现如下:

    /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode mergeKLists(ListNode[] lists) { if(lists == null || lists.length == 0) return null; // 创建小顶堆 PriorityQueue<ListNode> queue = 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++){ while(lists[i] != null){ queue.add(lists[i]); lists[i] = lists[i].next; } } ListNode dummy = new ListNode(0); // 创建一个哑点,用于保存头节点 ListNode head = dummy; // 遍历小顶堆 while(!queue.isEmpty()){ dummy.next = queue.poll(); dummy = dummy.next; } dummy.next = null; return head.next; } }

    人生若只如初见,何事秋风悲画扇。 等闲变却故人心,却道故人心易变。 -----------纳兰性德

    小白寄语:学如逆水行舟,不进则退。

    Processed: 0.009, SQL: 10