迭代器

迭代器与链表伴随使用,为了获取链表的当前节点,可以使用迭代器。
下面是单链表的迭代器,需要为单链表增加一个getIterator的方法,其他不变
链表类

public class SingleList {
    //头节点
    public Link first;
    //在链表的头部插入一个元素
    public void insertFirst(int num){
        Link link=new Link(num);
        link.next=first;
        first=link;
    }
    //在链表的头部删除一个元素
    public Link deleteFirst(){
        if(first==null){
            return null;
        }
        Link temp=first;
        first=first.next;
        return temp;
    }
    //遍历显示链表中的所有元素
    public void display(){
        Link current=first;
        while(current!=null){
            System.out.println(current.num+",");
            current=current.next;
        }
    }
    //根据变量查询指定元素节点
    public Link find(int num){
        Link current=first;
        while(current.num!=num){
            if(current.next==null){
                return null;
            }else{
                current=current.next;
            }
        }
        return current;
    }
    //根据指定变量删除节点
    public Link delete(int num){
        Link current=first;
        Link previous=null;
        while(current.num!=num){
            if(current.next==null){
                return null;
            }else{
                previous=current;
                current=current.next;
            }
        }
        if(current==first){
            first=first.next;
        }else{
            previous.next=current.next;
        }
        return current;
    }
    //设置迭代器
    public Iterator getIterator(){
        Iterator iterator=new Iterator(this);
        return iterator;
    }
}

迭代器类

public class Iterator {
    private Link previous;
    private Link current;
    private SingleList ourList;
    public Iterator(SingleList list){
        ourList=list;
        reset();
    }
    //将当前项指向链表的第一项
    public void reset(){
        current=ourList.first;
        previous=null;
    }
    //指针向后移动一项
    public void moveNext(){
        if(current.next==null){
            reset();
        }else{
            previous=current;
            current=current.next;
        }
    }
    //获取当前节点
    public Link getCurrent(){
        return current;
    }
    //判断是否到了最后一项
    public Boolean isLast(){
        if(current.next==null){
            return true;
        }else{
            return false;
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1 场景问题# 1.1 工资表数据的整合## 考虑这样一个实际应用:整合工资表数据。 这个项目的背景是这样的,项目...
    七寸知架构阅读 7,366评论 0 53
  • 目录 本文的结构如下: 引言 什么是迭代器模式 模式的结构 典型代码 代码示例 优点和缺点 适用环境 模式应用 一...
    w1992wishes阅读 3,547评论 0 1
  • 一.集合框架 1.集合框架(对象数组的概述和使用) a.案例演示 * 需求:我有5个学生,请把这个5个学生的信息存...
    梦游的沙师弟阅读 3,616评论 0 1
  • 2015年的总结 作为一名脾气大的产品经理,生活和工作迟迟纠缠不清。 不知道这条路通往何方。可总会更好的。 201...
    蒋家千斤阅读 1,666评论 0 0
  • "目录号: HY-14456A Anti-infection- MAC13243是抗菌剂。 Bacterial 相...
    莫小枫阅读 1,639评论 0 0

友情链接更多精彩内容