迭代器
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;
}
}
}