23. 合并K个排序链表
Posted 大威少
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了23. 合并K个排序链表相关的知识,希望对你有一定的参考价值。
一种方法是分治 类似快排的例子。
第二种使用堆,比较好理解。 堆中保存一个元素是一个链表的头部。
/** * 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<ListNode>(lists.length, new Comparator<ListNode>() { public int compare(ListNode o1, ListNode o2) { return o1.val - o2.val; } }); ListNode dummy = new ListNode(0); ListNode cur = dummy; for(ListNode list:lists) { if( list != null ) queue.add(list); } while( !queue.isEmpty() ) { cur.next = queue.poll(); cur = cur.next; if( cur.next != null ) queue.add(cur.next); } return dummy.next; } }
以上是关于23. 合并K个排序链表的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode练习(Python):链表类:第23题:合并K个排序链表:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。