题解 | #合并k个已排序的链表#

合并k个已排序的链表

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {

    public ListNode mergeKLists(ArrayList<ListNode> lists) {
        if (lists == null || lists.isEmpty()) {
            return null;
        }

        // 创建一个优先队列,使用 Lambda 表达式来定义比较器
        PriorityQueue<ListNode> queue = new PriorityQueue<>((a, b) -> a.val - b.val);

        // 将每个链表的头节点添加到优先队列中
        for (ListNode node : lists) {
            if (node != null) {
                queue.offer(node);
            }
        }

        // 创建一个虚拟头节点
        ListNode dummy = new ListNode(0);
        ListNode tail = dummy;

        // 从优先队列中不断取出节点,并将其添加到结果链表中
        while (!queue.isEmpty()) {
            ListNode node = queue.poll();
            tail.next = node;
            tail = tail.next;

            // 如果取出的节点还有下一个节点,则将其下一个节点添加到优先队列中
            if (node.next != null) {
                queue.offer(node.next);
            }
        }

        return dummy.next; // 返回合并后的链表的头节点
    }
}

代码思路,把所有链表的头节点都放入升序的优先队列中,每次取出优先队列中最小的头节点,如果该链表不止头节点,就把该链表的新头节点在加入优先队列中即可。

新使用的代码的介绍:

Lambda 表达式

Lambda表达式是Java 8引入的一种新特性,它提供了一种简洁的方式来实现匿名函数。在您的代码中,Lambda表达式用于定义优先队列中元素的比较逻辑。

java

复制

PriorityQueue<ListNode> queue = new PriorityQueue<>((a, b) -> a.val - b.val);

这行代码创建了一个优先队列,其中ListNode按其val属性升序排列。Lambda表达式(a, b) -> a.val - b.val定义了比较器。这里,ab是优先队列中的两个ListNode对象,表达式返回的是aval减去bval的值。这意味着如果a.val小于b.val,则a会排在b前面。

offer 方法

offer方法是PriorityQueue类的一个方法,用于将一个元素插入到优先队列中。这个方法会根据队列的比较器(在这里是Lambda表达式定义的比较器)来决定元素的插入位置。

java

复制

if (node != null) {
    queue.offer(node);
}

这行代码检查node是否为null,如果不是,则将其添加到优先队列中。

poll 方法

poll方法也是PriorityQueue类的一个方法,用于从优先队列中取出并移除队列头部(最小的元素)。如果队列为空,poll方法将返回null

java

复制

ListNode node = queue.poll();

这行代码从优先队列中取出最小的节点(根据我们之前定义的比较器)。

全部评论

相关推荐

卖萌的外卷侠风度翩翩:这日语比赛都是开卷,而且也没证书,并且写这么多日语的而且是个二本,基本说明英语水平一点没有,而且找计算机专业的,把英语水平这么差暴露出来应该都不想要吧
实习,投递多份简历没人回...
点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 golang
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务