迭代器实现
链表由一系列结点组成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
用链表实现迭代器:
class LinkIter{ public int iData; public LinkIter next; public LinkIter(int data) { iData = data; } public void displayLink() { System.out.println(iData + " "); }}class LinkListIter{ public LinkIter first; public LinkListIter() { first = null; } public boolean isEmpty() { return first == null; } public LinkIter getFirst() { return first; } public void setFirst(LinkIter first) { this.first = first; } public void displayList() { LinkIter current = first; while (current != null) { current.displayLink(); current = current.next; } } public ListIterator getIterator() { return new ListIterator(this); }}class ListIterator{ private LinkIter current; private LinkIter previous; private final LinkListIter ourList; public ListIterator(LinkListIter lnk) { ourList = lnk; reset(); } public void reset() { current = ourList.getFirst(); previous = null; } public boolean atEnd() { return current.next == null; } public void nextLink() { previous = current; current = current.next; } public LinkIter getLink() { return current; } //在当前结点后插入,先判断链表是否为空 public void insertAfter(int dd) { LinkIter newLink = new LinkIter(dd); if(ourList.isEmpty()) { ourList.setFirst(newLink); current = newLink; } else { newLink.next = current.next; current.next = newLink; nextLink(); } } //在当前结点前插入,判断是否是首结点 public void insertBefore(int dd) { LinkIter newLink = new LinkIter(dd); if(previous == null) { newLink.next = ourList.getFirst(); ourList.setFirst(newLink); reset(); } else { newLink.next = previous.next; previous.next = newLink; nextLink(); } } //删除当前结点,判断是否是首结点 public int deleteCurrent() { int data = current.iData; if(previous == null) { ourList.setFirst(current.next); reset(); } else { previous.next = current.next; if(atEnd()) reset(); else current = current.next; } return data; }