leetcode刷题笔记二十三 合并K个排序链表 Scala版本

时间:2020-04-22
本文章向大家介绍leetcode刷题笔记二十三 合并K个排序链表 Scala版本,主要包括leetcode刷题笔记二十三 合并K个排序链表 Scala版本使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

leetcode刷题笔记二十三 合并K个排序链表 Scala版本

源地址:23. 合并K个排序链表

问题描述:

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Example:

Input:
[
  1->4->5,
  1->3->4,
  2->6
]
Output: 1->1->2->3->4->4->5->6

代码补充:

//一般来说,最直接的方法是将所有链表进行合并,然后进行排序,显然这种
//做法效率低下且繁杂,采用优先队列的方法处理效率较高。
object Solution {
    //引入scala的优先队列结构
    import scala.collection.mutable.PriorityQueue
    def mergeKLists(lists: Array[ListNode]): ListNode = {
        //构建优先队列,ListNode类型的空优先队列
        //根据节点的x值从小向大排列
        val pq = PriorityQueue.empty[ListNode](Ordering.by(n => n.x)).reverse
        //设置双头指针,便于返回
        var head = new ListNode(0)
        var nhead = head
        //将Lists中各个链表加入优先队列
        for (elem <- lists if (elem != null)) {println(elem);pq.enqueue(elem)}
        //由于队列内有序,当PQ不为空时,弹出最小值链表头节点,如果其后还有结点,移动至后一个节点,再将队列入队,反复弹出当前队列中的最小的点,直到队列为空
        while(pq.isEmpty != true){
            var dnode = pq.dequeue()
            head.next = new ListNode(dnode.x)
            if(dnode.next != null) pq.enqueue(dnode.next)
            head = head.next
        }
        nhead.next
    }
}

原文地址:https://www.cnblogs.com/ganshuoos/p/12753712.html