题解 | #牛群的合并#

牛群的合并

https://www.nowcoder.com/practice/d0cb24e1494e4f45a4b7d1a17db0daef

题目考察的知识点:

  • 合并多个有序链表
  • 使用优先队列(PriorityQueue)来排序和合并链表

题目解答方法的文字分析:

该题要求将多个有序链表合并成一个大的有序链表。为了保持有序性,可以使用优先队列来对链表进行排序和合并。首先,将每个链表的头节点加入优先队列,并根据节点值的大小进行排序。然后,从队列中取出最小值的节点,将其加入到合并后的链表中,并将其下一个节点(如果有的话)加入队列。重复这个过程直到队列为空,得到最终合并的有序链表。

本题解析所用的编程语言:Java

完整且正确的编程代码:

import java.util.*;

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

public class Solution {
    class Status implements Comparable<Status> {
        int val;
        ListNode ptr;

        Status(int val, ListNode ptr) {
            this.val = val;
            this.ptr = ptr;
        }

        @Override
        public int compareTo(Status status) {
            return this.val - status.val;
        }
    }
    PriorityQueue<Status> queue = new PriorityQueue<>();
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param lists ListNode类一维数组
     * @return ListNode类
     */
    public ListNode mergeKLists (ListNode[] lists) {
        for (ListNode node : lists) {
            if (node != null) {
                queue.offer(new Status(node.val, node));
            }
        }
        ListNode head = new ListNode(0);
        ListNode tail = head;
        while (!queue.isEmpty()) {
            Status poll = queue.poll();
            tail.next = poll.ptr;
            tail = tail.next;
            if (poll.ptr.next != null) {
                queue.offer(new Status(poll.ptr.next.val, poll.ptr.next));
            }
        }
        return head.next;
    }
}

全部评论

相关推荐

05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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