定义一个链表接口
package linked;
public interface ListInterface < T> {
public int getSize ( ) ;
public void addHead ( T data) ;
public void addTail ( T data) ;
}
带有迭代器的链表接口
package linked;
import java. util. Iterator;
public interface LIstWithIteratorInterface < T> extends ListInterface < T> {
public Iterator< T> getIterator ( ) ;
}
带有迭代器的链表的实现类
package linked;
import java. util. Iterator;
public class LinkListWithIterator < T> implements LIstWithIteratorInterface < T> {
private Node head;
private Node tail;
private int size;
private class Node {
private T data;
private Node next;
public Node ( T data) {
this . data = data;
}
@Override
public String toString ( ) {
return "Node [ data=" + data + ", next=" + next + "]" ;
}
}
public LinkListWithIterator ( ) {
super ( ) ;
}
@Override
public int getSize ( ) {
return size;
}
@Override
public void addHead ( T data) {
Node newNode = new Node ( data) ;
if ( size == 0 ) {
head = newNode;
tail = newNode;
} else {
newNode. next = head;
head = newNode;
}
size++ ;
}
@Override
public void addTail ( T data) {
Node newNode = new Node ( data) ;
if ( size == 0 ) {
head = newNode;
tail = newNode;
} else {
tail. next = newNode;
tail = newNode;
}
size++ ;
}
private class IteratorForLinkedList implements Iterator < T> {
private Node nextNode;
public IteratorForLinkedList ( ) {
nextNode = head;
}
@Override
public boolean hasNext ( ) {
return nextNode!= null;
}
@Override
public T next ( ) {
if ( hasNext ( ) ) {
Node rs = nextNode;
nextNode = nextNode. next;
return rs. data;
}
return null;
}
}
@Override
public Iterator< T> getIterator ( ) {
return new IteratorForLinkedList ( ) ;
}
}
测试
package linked;
import java. util. Iterator;
public class IteratorLinkTest {
public static void main ( String[ ] args) {
LinkListWithIterator< Integer> link = new LinkListWithIterator < > ( ) ;
link. addHead ( 1 ) ;
link. addHead ( 2 ) ;
link. addHead ( 3 ) ;
Iterator< Integer> iterator = link. getIterator ( ) ;
while ( iterator. hasNext ( ) ) {
System. out. println ( iterator. next ( ) ) ;
}
}
}