You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双向链表Iterator.next()方法能否不使用局部变量实现?

实现方案

直接使用try-finally结构即可完全去掉局部变量,逻辑和你原有实现完全等价:

/** Return the next element to enumerate. */
public @Override E next() throws NoSuchElementException {
    if (!hasNext()) throw new NoSuchElementException();
    try {
        return n.val;
    } finally {
        n = n.succ;
    }
}
原理解释

Java中try-finally的执行顺序为:

  1. 先执行try块内的代码,对return后的表达式n.val完成求值,确定最终返回值
  2. 执行finally块内的赋值操作,将n指向后续节点n.succ
  3. 方法返回之前已经求值完成的n.val

这种写法完全规避了你提到的NPE问题:hasNext()校验已经保证进入方法时n一定是非空的,返回值求值完成后才会修改n的指向,哪怕n.succ为null,也不会再访问修改后n的任何属性,不会出现空指针。

内容的提问来源于stack exchange,提问作者James E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:18:00