Mega Code Archive

 
Categories / Java Tutorial / Collections
 

Iterators on a linked list

class Link {   public int iData;   public Link next;   public Link previous;   public Link(int id) {     iData = id;   }   public String toString() {     return "{" + iData + "} ";   } } class LinkList {   private Link first;   public LinkList() {     first = null;   }   public Link getFirst() {     return first;   }   public void setFirst(Link f) {     first = f;   }   public boolean isEmpty() {     return first == null;   }   public ListIterator getIterator() {     return new ListIterator(this);   }   public String toString() {     Link current = first;     String str ="";     while (current != null) {       str += current.toString();       current = current.next;     }     return str;   } } class ListIterator {   private Link current;   private Link previous;   private LinkList ourList;   public ListIterator(LinkList list) {     ourList = list;     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 Link getCurrent() {     return current;   }   public void insertAfter(int dd) {     Link newLink = new Link(dd);     if (ourList.isEmpty()) {       ourList.setFirst(newLink);       current = newLink;     } else {       newLink.next = current.next;       current.next = newLink;       nextLink();     }   }   public void insertBefore(int dd) {     Link newLink = new Link(dd);     if (previous == null) {       newLink.next = ourList.getFirst();       ourList.setFirst(newLink);       reset();     } else {       newLink.next = previous.next;       previous.next = newLink;       current = newLink;     }   }   public double deleteCurrent() {     int value = current.iData;     if (previous == null) {       ourList.setFirst(current.next);       reset();     } else {       previous.next = current.next;       if (atEnd())         reset();       else         current = current.next;     }     return value;   } } public class MainClass {   public static void main(String[] args) {     LinkList theList = new LinkList();      ListIterator iter1 = theList.getIterator();     iter1.insertAfter(20);     iter1.insertAfter(40);     iter1.insertAfter(80);     iter1.insertBefore(60);     System.out.println(theList);     iter1.reset();     if (!theList.isEmpty() && !iter1.atEnd()){       iter1.nextLink();     }          System.out.println("Returned " + iter1.getCurrent().iData);     iter1.insertBefore(99);     iter1.insertAfter(100);     System.out.println(theList);   } } {20} {40} {60} {80} Returned 40 {20} {99} {100} {40} {60} {80}