
本文详解如何在不借助辅助方法的前提下,遍历单链表并准确返回指定整数值最后一次出现的索引位置;核心在于边遍历边更新匹配索引,确保返回的是最后一个而非首个匹配项。
本文详解如何在不借助辅助方法的前提下,遍历单链表并准确返回指定整数值最后一次出现的索引位置;核心在于边遍历边更新匹配索引,确保返回的是最后一个而非首个匹配项。
在实现 lastIndexOf(int value) 方法时,关键挑战有两个:一是必须返回索引(位置)而非节点值,二是必须定位最后一次出现的位置,而非遇到第一个匹配就立即返回。由于单链表只能单向遍历,无法从尾部反向查找,因此需采用“一次正向扫描 + 动态记录”的策略:遍历过程中维护一个变量,每次发现匹配值时就用当前索引覆盖它;遍历结束后,该变量自然保存的就是最后一次匹配的索引。
以下是符合题目要求的标准实现(假设 ListNode 结构为 int data; ListNode next):
public int lastIndexOf(int value) {
ListNode current = front;
int lastIndex = -1; // 初始化为-1,表示未找到
for (int index = 0; current != null; index++) {
if (current.data == value) {
lastIndex = index; // 每次匹配都更新,最终保留最后一次
}
current = current.next;
}
return lastIndex;
}
该实现时间复杂度为 O(n),空间复杂度为 O(1),严格满足题目限制——不调用其他方法、不使用额外数据结构。注意:索引从 0 开始计数,与数组和多数编程语言惯例一致。例如,对于链表 [1, 18, 2, 7, 18, 39, 18, 40],调用 lastIndexOf(18) 将依次在索引 1、4、6 处匹配,并最终返回 6;若值不存在(如 lastIndexOf(3)),lastIndex 始终保持 -1,直接返回。
Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。
⚠️ 常见错误提醒:
- ❌ 不要在首次匹配时 return index(这会提前终止,仅返回首次位置);
- ❌ 不要将 target 初始化为未定义值或 0(应显式初始化为 -1,体现“未找到”语义);
- ❌ 不要混淆 current.data 与 index(前者是值,后者才是题目要求的返回结果)。
掌握此模式后,可轻松迁移至泛型链表或带哨兵节点的变体——核心思想始终是:遍历中延迟返回,用状态变量捕获最终有效信息。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










