迭代器與鏈表伴隨使用曹锨,為了獲取鏈表的當(dāng)前節(jié)點眼姐,可以使用迭代器。
下面是單鏈表的迭代器翁锡,需要為單鏈表增加一個getIterator的方法,其他不變
鏈表類
public class SingleList {
//頭節(jié)點
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;
}
}
//根據(jù)變量查詢指定元素節(jié)點
public Link find(int num){
Link current=first;
while(current.num!=num){
if(current.next==null){
return null;
}else{
current=current.next;
}
}
return current;
}
//根據(jù)指定變量刪除節(jié)點
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;
}
//設(shè)置迭代器
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();
}
//將當(dāng)前項指向鏈表的第一項
public void reset(){
current=ourList.first;
previous=null;
}
//指針向后移動一項
public void moveNext(){
if(current.next==null){
reset();
}else{
previous=current;
current=current.next;
}
}
//獲取當(dāng)前節(jié)點
public Link getCurrent(){
return current;
}
//判斷是否到了最后一項
public Boolean isLast(){
if(current.next==null){
return true;
}else{
return false;
}
}
}