public LinkedListElement prev;
public Object element;
- public LinkedListElement( Object e,
- LinkedListElement n,
- LinkedListElement p ) {
+ public LinkedListElement(Object e,
+ LinkedListElement n,
+ LinkedListElement p) {
element = e;
next = n;
prev = p;
clear();
}
- public add( Object o ) {
+ public add(Object o) {
if( tail == null ) {
- head = new LinkedListElement( o, null, null );
+ head = new LinkedListElement(o, null, null);
tail = head;
} else {
- tail.next = new LinkedListElement( o, null, tail );
+ tail.next = new LinkedListElement(o, null, tail);
tail = tail.next;
}
size++;
}
- public addFirst( Object o ) {
+ public addFirst(Object o) {
if( head == null ) {
- head = new LinkedListElement( o, null, null );
+ head = new LinkedListElement(o, null, null);
tail = head;
} else {
- head.prev = new LinkedListElement( o, head, null );
+ head.prev = new LinkedListElement(o, head, null);
head = head.prev;
}
size++;
}
- public addLast( Object o ) {
- add( o );
+ public addLast(Object o) {
+ add(o);
}
public clear() {
return size;
}
+ public boolean isEmpty() {
+ return size == 0;
+ }
+
public Object clone() {
- System.out.println( "LinkedList.clone() not implemented." );
+ System.out.println("LinkedList.clone() not implemented.");
System.exit(-1);
}
- public boolean contains( Object o ) {
+ public boolean contains(Object o) {
LinkedListElement e = head;
- while( e != null ) {
- if( e.element == o ) {
- return true;
+ if (o==null) {
+ while(e!=null) {
+ if (e.element==null) {
+ return true;
+ }
+ e=e.next;
+ }
+ return false;
+ } else {
+ while( e != null ) {
+ if (o.equals(e.element)) {
+ return true;
+ }
+ e = e.next;
}
- e = e.next;
}
return false;
}
if( tail == null ) {
return null;
}
- return tail.element;
+ return tail.element;
}
public Object element() {
getLast();
}
- public void removeFirst() {
+ public Object removeFirst() {
if( head == null ) {
- System.out.println( "LinkedList: illegal removeFirst()" );
+ System.out.println("LinkedList: illegal removeFirst()");
System.exit(-1);
}
+ Object o = head.element;
head = head.next;
if( head != null ) {
head.prev = null;
+ } else {
+ tail = null;
}
size--;
+ return o;
}
- public void removeLast() {
+ public Object removeLast() {
if( tail == null ) {
- System.out.println( "LinkedList: illegal removeLast()" );
+ System.out.println("LinkedList: illegal removeLast()");
System.exit(-1);
}
+ Object o = tail.element;
tail = tail.prev;
if( tail != null ) {
tail.next = null;
+ } else {
+ head = null;
}
size--;
+ return o;
}
- public void remove( Object o ) {
+ public boolean remove(Object o) {
if( head == null ) {
- System.out.println( "LinkedList: illegal remove( Object o )" );
- System.exit(-1);
+// System.out.println("LinkedList: illegal remove( Object o )");
+// System.exit(-1);
+ return false;
}
LinkedListElement e = head;
- while( e != null ) {
- if( e.element == o ) {
- if( e.prev != null ) {
- e.prev.next = e.next;
- }
- if( e.next != null ) {
- e.next.prev = e.prev;
- }
- size--;
- return;
+ while (e != null) {
+ if (e.element == o) {
+ if (e.prev != null) {
+ e.prev.next = e.next;
+ }
+ if (e.next != null) {
+ e.next.prev = e.prev;
+ }
+ size--;
+ return true;
}
e = e.next;
}
- System.out.println( "LinkedList: illegal remove( Object o ), "+o+" not found" );
- System.exit(-1);
+// System.out.println("LinkedList: illegal remove( Object o ), "+o+" not found");
+// System.exit(-1);
+ return false;
}
public Object pop() {
return o;
}
- public void push( Object o ) {
- addFirst( o );
+ public void push(Object o) {
+ addFirst(o);
}
public Iterator iterator() {
- return new LinkedListIterator( this );
+ return new LinkedListIterator(this);
}
}
public class LinkedListIterator extends Iterator {
+ LinkedList ll;
LinkedListElement itr;
-
- public LinkedListIterator( LinkedList ll ) {
+ 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.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;
}
}