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

如何使用Java Iterator遍历自定义LinkedList打印数据,解决返回null问题

问题根因与修复方案

核心错误点

  • 迭代器没有绑定实际存储数据的MyLinkedList实例:MyLinkedListIterator内部初始化时新建了空链表,和main方法中添加了元素的链表完全无关,所以currentNode初始就是null,调用next自然返回空。
  • next方法逻辑错误:现有代码每次都返回链表头节点对象(不是节点存储的元素值),且直接把指针跳转到链表尾,完全不具备遍历能力。
  • 迭代器创建方式错误:main方法中直接实例化MyLinkedListIterator,没有传入填充好数据的链表实例。
  • 冗余实现:MyLinkedList不需要实现Iterator接口,迭代逻辑是迭代器的职责,现有类中实现的hasNext/next都是无效代码。

修复步骤

1. 修改MyLinkedListIterator类

给迭代器增加带参构造方法,接收要遍历的链表实例,同时修正next方法的遍历逻辑:

class MyLinkedListIterator<E> implements Iterator<E> {
    MyLinkedList<E> list;
    Node<E> currentNode;

    // 新增带参构造,绑定要遍历的链表
    public MyLinkedListIterator(MyLinkedList<E> list) {
        this.list = list;
        this.currentNode = list.head;
    }

    public boolean hasNext() {
        return currentNode != null;
    }

    // 修正next逻辑,返回当前节点元素,指针后移
    public E next() {
        E res = currentNode.element;
        currentNode = currentNode.next;
        return res;
    }
}

2. 修改MyLinkedList的iterator方法

传入当前链表实例给迭代器,同时删除MyLinkedList类的Iterator接口实现(以及对应的无效hasNext/next方法):

// 修改类定义,不再实现Iterator接口
class MyLinkedList<E> implements MyList<E> {
    // 原有其他属性、方法保持不变
    public Iterator<E> iterator() {
        return new MyLinkedListIterator(this);
    }
}

3. 修改main方法中迭代器的创建方式

调用链表自身的iterator()方法获取绑定了当前数据的迭代器:

public static void main(String[] args) throws Exception {
    MyLinkedList<String> list = new MyLinkedList<>();
    list.add("drop");
    list.add("goofy");
    list.add("Donald");
    list.add("Duck");
    list.add("Mouse");
    list.add("Kangaroo");
    list.add("Koala");
    // 调用链表的iterator方法获取迭代器
    Iterator<String> iter = list.iterator();
    while (iter.hasNext()) {
        System.out.print(iter.next() + " ");
    }
}

运行效果

修复后输出结果为:
drop goofy Donald Duck Mouse Kangaroo Koala

内容的提问来源于stack exchange,提问作者Andrew Amirzadeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:54:01