Java 中查找链表倒数第 K 个节点2025年5月6日 | 阅读 5 分钟 这是 **Google、Amazon、TCS、Accenture、Flipkart** 等顶级 IT 公司面试中经常出现的问题。通过解决这个问题,可以考察面试者的逻辑思维能力、批判性思维和解决问题的能力。因此,在本节中,我们将使用不同的方法和逻辑来查找 **链表倒数第 K 个节点**。我们还将创建 Java 程序来实现这一点。 问题陈述给定一个 链表 和一个 整数 K,我们需要找到倒数第 K 个节点。如果 K 大于节点数,则返回 -1。让我们通过一个例子来理解。 示例-1 输入: 10 -> 25 -> 30 -> 45 -> 50, N = 2 输出 45 解释: 节点 45 是链表倒数第二个节点。 示例-2 输入: 5 -> 10 -> 15 -> 20 -> 25, N = 1 输出 25 解释: 节点 25 是链表的最后一个节点(倒数第 1 个节点)。 朴素方法朴素方法首先通过遍历链表来计算其总长度。然后,它计算所需节点从开头开始的位置,并再次遍历链表以到达该节点。 算法步骤 1: 遍历链表以计算其总长度。 步骤 2: 如果 N 大于长度,则返回 -1(无效位置)。 步骤 3: 计算从开头开始的位置为 (长度 - N + 1)。 步骤 4: 从头开始移动到计算出的目标位置。 步骤 5: 到达目标节点后,返回其值。 实施文件名: NavieApproach.java 输出 30 使用双指针法该代码使用两个指针来高效地查找链表倒数第 N 个节点。一个指针向前移动 N 步,然后两个指针一起移动,直到第一个指针到达链表末尾,此时第二个指针指向所需的节点。 算法步骤 1: 初始化两个指针 firstPointer 和 secondPointer,都指向链表的头部。 步骤 2: 将 firstPointer 向前移动 N 步。如果在完成 N 步之前 firstPointer 到达链表末尾,则返回 -1,因为链表中节点少于 N 个。 步骤 3: 每次将两个指针都向前移动一步,直到 firstPointer 到达链表末尾。 步骤 4: 当 firstPointer 到达链表末尾时,secondPointer 将指向倒数第 N 个节点。 步骤 5: 访问并返回 secondPointer 指向的节点值,即倒数第 N 个节点。 实施文件名: NthNodeFromEnd.java 输出 30 时间复杂度: O(M),其中 M 是链表中的节点数,因为链表被遍历了两次。 空间复杂度: O(1),因为只使用了两个指针,只需要恒定的额外空间。 下一个主题Java 丑数 |
Java 是开发人员编写代码的首选。它是一种非常流行且成功的编程语言,用于构建应用程序。Java 开发人员的数量日益增加。它主要用于开发 Web 和移动应用程序。要成为...
5 分钟阅读
将线性方程以矩阵形式表示在线性代数中至关重要,广泛应用于科学和工程领域。这种方法将线性方程组整合到矩阵中:用于系数和常数。通过这样做,矩阵运算如求逆、乘法和行列式计算成为可行的方法...
阅读 6 分钟
? 有时,我们需要将数据表示为表格格式,尤其是在处理数据库时。在本节中,我们将创建 Java 程序,将数据以表格格式打印到控制台。有许多方法可以打印...
阅读 4 分钟
Java 17 于 2021 年 9 月发布,取代 Java 11 成为最新的 LTS(长期支持)版本。目前最关键的问题是,“Java 17 包含哪些 JDK(14)增强提案(JEP)?” 其中十个是新功能,两个已删除,两个...
阅读 19 分钟
Java 中的 Read-Eval-Print Loop (REPL) Read-Eval-Print Loop 或 REPL 是一个 shell 接口。该接口读取并评估每一行输入,然后打印结果。Read-Eval-Print Loop 帮助我们与特定状态下的应用程序运行时进行交互。命令是...
5 分钟阅读
用于自定义序列化机制。Java 序列化效率不高。当我们有包含多个属性和属性的臃肿对象时,序列化它们并不好。在这种情况下,外部化会更有效。让我们了解 Java 中的序列化:什么是序列化:...
阅读 4 分钟
为了将提供的字符读取到 CharBuffer 实例中,使用了 Java 的 Reader Class 的 read(CharBuffer) 方法。Java 可以获取一个称为 CharBuffer 的自定义缓冲区。nio 包,旨在高效地存储和操作字符序列。这种方法使得管理字符...
5 分钟阅读
将一个数字分成两部分,使每个部分都是素数,那么这些点就成为素点。任务是打印给定数字的所有这些素点。让我们通过示例来理解。示例 1:int n = 5717; 在...处切割...
阅读 6 分钟
Java 中唯一接受三个操作数的条件运算符是三元运算符。Java 程序员经常将其用作 if-then-else 表达式的单行替代方案。三元运算符可以替代 if-else 语句,甚至可以用于...
阅读 3 分钟
如何在 Java 中读取 CSV 文件?CSV 代表逗号分隔值。它是一种简单的文件格式,用于以简单的文本形式存储表格数据,例如电子表格或数据库。CSV 格式的文件可以导入到...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India