Add remove operation to LinkedListIterator and fix bug with LinkedList.removeFirst...
authorjjenista <jjenista>
Wed, 25 Feb 2009 20:04:55 +0000 (20:04 +0000)
committerjjenista <jjenista>
Wed, 25 Feb 2009 20:04:55 +0000 (20:04 +0000)
Robust/src/ClassLibrary/Iterator.java
Robust/src/ClassLibrary/LinkedList.java
Robust/src/Tests/LinkedListTest.java

index 0dd24e0419512a1cfd7cea920c03df86fc1aa375..e88a4854755d958d760d0646e087812032150fe3 100644 (file)
@@ -8,4 +8,9 @@ public class Iterator {
     System.out.println( "Iterator is an abstract class." );
     System.exit(-1);
   }
+
+  void remove() {
+    System.out.println( "Iterator is an abstract class." );
+    System.exit(-1);
+  }    
 }
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;
   }
 }
index fa3af9da277f3b4cd66589cd6b02bb4ede7a342a..81243ff29829f22ed5c6e1e3e81097c1da5038e4 100644 (file)
@@ -13,5 +13,31 @@ public class LinkedListTest {
     x = (Integer)list.pop();
 
     System.out.println( "should be a 3: "+x );
+
+    list.addLast( (Object)new Integer( 6 ) );
+    list.addLast( (Object)new Integer( 5 ) );
+    list.addLast( (Object)new Integer( 4 ) );
+    list.addLast( (Object)new Integer( 3 ) );
+
+    System.out.println( "Looking for list 6, 5, 4, 3: " );
+    System.out.print( "  " );
+    Iterator i = list.iterator();
+    while( i.hasNext() ) {
+      System.out.print( i.next() + ", " );
+    }
+    System.out.println( "" );
+
+    i = list.iterator();
+    i.next();
+    i.next();
+    i.remove();
+
+    System.out.println( "Removed 5, looking for list 6, 4, 3: " );
+    System.out.print( "  " );
+    i = list.iterator();
+    while( i.hasNext() ) {
+      System.out.print( i.next() + ", " );
+    }
+    System.out.println( "" );
   }
 }
\ No newline at end of file