Java链表中如何实现查找元素最后出现的索引?
链表lastIndexOf方法实现问题解答
需求说明
- 为
LinkedIntList类实现lastIndexOf方法,接收一个整数参数,返回该值在链表中最后一次出现的索引;若未找到目标值,返回-1。 - 限制:不能调用类中其他方法。
- 示例:链表为
[1, 18, 2, 7, 18, 39, 18, 40]时,lastIndexOf(18)返回6,lastIndexOf(3)返回-1。
类定义参考
public class LinkedIntList { private ListNode front; // null for an empty list ... }
原代码问题分析
你编写的代码:
public int lastIndexOf(int value) { ListNode current = front; int target; while (current != null) { if(current.data == value) { target = current.data; return target; } current = current.next; } return -1; }
存在两个核心问题:
- 匹配到值时返回的是节点的
data值,而非当前节点的索引; - 首次匹配就立即返回,无法遍历到后续节点记录最后一次出现的位置。
修正后的代码
public int lastIndexOf(int value) { ListNode current = front; int lastIndex = -1; // 初始化为-1,表示未找到目标 int currentIndex = 0; while (current != null) { if (current.data == value) { // 每次找到匹配值时,更新最后出现的索引为当前索引 lastIndex = currentIndex; } current = current.next; currentIndex++; } return lastIndex; }
关键思路说明
- 用
lastIndex变量持续跟踪最后一次匹配到目标值的索引,初始值设为-1(对应未找到的场景); - 用
currentIndex记录当前遍历到的节点位置,从0开始随节点遍历递增; - 遍历整个链表,不中途返回——只要遇到匹配值就更新
lastIndex,确保遍历完成后lastIndex存储的是最后一次出现的索引; - 遍历结束后直接返回
lastIndex,自然覆盖“未找到返回-1”的要求。
内容的提问来源于stack exchange,提问作者user19334054
相关产品推荐
相关产品推荐

