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

Java自定义链表实现Iterable接口时如何让迭代器返回Node类型

自定义链表迭代器返回Node节点的实现方案

你需要调整Iterable接口的泛型参数、修正迭代器方法的泛型声明即可实现需求,修改要点如下:

  1. 实现Iterable接口时,直接将泛型参数指定为内部类Node,代表迭代器返回的元素类型为Node
  2. 删除iterator()方法上多余的方法级泛型声明<T>,避免和类级泛型混淆
  3. 修正hasNext()方法的判断逻辑,避免空指针异常,同时避免漏掉最后一个节点

修改后的完整代码

import java.util.Iterator;

class OwnList<Type> implements Iterable<OwnList<Type>.Node>{

    class Node{
        Type data;
        Node next;

        public Node(Type data, Node next){
            this.data = data;
            this.next = next;
        }
    }

    Node head;

    @Override
    public Iterator<Node> iterator(){
        return new Iterator<Node>(){
            // 初始指向头节点
            private Node current = head;

            @Override
            public boolean hasNext(){
                // 只要当前节点不为空就存在下一个可返回的元素
                return current != null;
            }

            @Override
            public Node next(){
                Node returnNode = current;
                current = current.next;
                return returnNode;
            }

            @Override
            public void remove(){
                // 不支持移除操作可以直接抛出异常
                throw new UnsupportedOperationException("remove operation not supported");
            }
        };
    }
}

使用示例

你可以直接在增强for循环中拿到Node对象进行操作:

public static void main(String[] args) {
    OwnList<String> myList = new OwnList<>();
    // 此处省略给myList添加节点的逻辑
    
    // foreach遍历直接获取Node节点
    for (OwnList<String>.Node node : myList) {
        System.out.println(node.data);
        // 可直接操作节点的next等属性,满足灵活需求
    }
}

兼容常规使用的优化建议

如果你后续需要兼顾常规场景(迭代返回节点存储的数据),可以保留默认迭代器返回Type类型,单独新增一个获取Node迭代器的方法:

// 常规迭代器,返回节点存储的数据
@Override
public Iterator<Type> iterator() {
    // 实现逻辑返回data即可
}

// 单独提供返回Node的迭代器方法
public Iterator<Node> nodeIterator() {
    // 上文写的返回Node的迭代器实现
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:08