迭代器

2017-09-13  本文已影响0人  shenlong77

迭代器与链表伴随使用,为了获取链表的当前节点,可以使用迭代器。
下面是单链表的迭代器,需要为单链表增加一个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;
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读