Add remove operation to LinkedListIterator and fix bug with LinkedList.removeFirst...
[IRC.git] / Robust / src / ClassLibrary / LinkedList.java
index 6935687007a75cd910ff15b4dd6876afc64487a0..b4f26e69a5e935d3527ef3a45014c06af7215c60 100644 (file)
@@ -113,6 +113,8 @@ public class LinkedList {
     head = head.next;
     if( head != null ) {
       head.prev = null;
+    } else {
+      tail = null;
     }
     size--;
   }
@@ -125,6 +127,8 @@ public class LinkedList {
     tail = tail.prev;
     if( tail != null ) {
       tail.next = null;
+    } else {
+      head = null;
     }
     size--;
   }
@@ -168,23 +172,36 @@ public class LinkedList {
 }
 
 public class LinkedListIterator extends Iterator {
+  LinkedList ll;
   LinkedListElement itr;
+  Object removeable;
   
   public LinkedListIterator( LinkedList ll ) {
+    this.ll = ll;
     itr = ll.head;
+    removeable = null;
   }
 
-  boolean hasNext() {
+  public boolean hasNext() {
     return itr != null;
   }
 
-  Object next() {
+  public Object next() {
     if( itr == null ) {
       System.out.println( "LinkedListIterator: illegal next()" );
       System.exit(-1);
     }
-    Object o = itr.element;
+    removeable = itr.element;
     itr = itr.next;
-    return o;
+    return removeable;
+  }
+
+  public void remove() {
+    if( removeable == null ) {
+      System.out.println( "LinkedListIterator: illegal remove()" );
+      System.exit(-1);
+    }
+    ll.remove( removeable );
+    removeable = null;
   }
 }