Java中如何为自定义LinkedList实现lastIndexOf(E e)方法
问题原因分析
你的现有代码存在两个核心问题:
- 相等判断逻辑错误:
e.equals(current)是把传入的元素和Node节点对象本身做对比,永远不会匹配成功,需要取节点中存储的元素值current.item做比较 - 缺少节点指针移动逻辑:循环内没有向前移动
current指针,会导致永远重复比对尾节点,进入死循环或者提前返回错误结果
另外还要补充null值判断逻辑,避免传入的元素e为null时抛出空指针异常。
完整实现代码
public int lastIndexOf(E e) { // 链表为空直接返回-1 if (size == 0) { return -1; } Node<E> current = tail; // e为null的情况单独处理,避免空指针 if (e == null) { for (int i = size - 1; i >= 0; i--) { if (current.item == null) { return i; } current = current.prev; } } else { for (int i = size - 1; i >= 0; i--) { if (e.equals(current.item)) { return i; } current = current.prev; } } // 未找到匹配元素返回-1 return -1; }
实现说明
- 遍历方向:从尾节点
tail开始,每次通过current = current.prev移动到前一个节点,符合从后向前查找的要求 - 空值兼容:单独处理
e为null的场景,避免调用equals方法抛出空指针 - 边界处理:提前判断链表为空的情况,直接返回-1避免无意义遍历
内容的提问来源于stack exchange,提问作者maj
相关产品推荐
相关产品推荐

