--- jsr166/src/main/java/util/LinkedList.java 2003/10/21 05:11:40 1.11 +++ jsr166/src/main/java/util/LinkedList.java 2003/12/28 00:55:45 1.14 @@ -131,9 +131,7 @@ public class LinkedList * @throws NoSuchElementException if this list is empty. */ public E removeFirst() { - E first = header.next.element; - remove(header.next); - return first; + return remove(header.next); } /** @@ -143,9 +141,7 @@ public class LinkedList * @throws NoSuchElementException if this list is empty. */ public E removeLast() { - E last = header.previous.element; - remove(header.previous); - return last; + return remove(header.previous); } /** @@ -289,9 +285,16 @@ public class LinkedList * Removes all of the elements from this list. */ public void clear() { - modCount++; + Entry e = header.next; + while (e != header) { + Entry next = e.next; + e.next = e.previous = null; + e.element = null; + e = next; + } header.next = header.previous = header; - size = 0; + size = 0; + modCount++; } @@ -354,9 +357,7 @@ public class LinkedList * range (index < 0 || index >= size()). */ public E remove(int index) { - Entry e = entry(index); - remove(e); - return e.element; + return remove(entry(index)); } /** @@ -582,13 +583,14 @@ public class LinkedList public void remove() { checkForComodification(); + Entry lastNext = lastReturned.next; try { LinkedList.this.remove(lastReturned); } catch (NoSuchElementException e) { throw new IllegalStateException(); } if (next==lastReturned) - next = lastReturned.next; + next = lastNext; else nextIndex--; lastReturned = header; @@ -637,14 +639,18 @@ public class LinkedList return newEntry; } - private void remove(Entry e) { + private E remove(Entry e) { if (e == header) throw new NoSuchElementException(); + E result = e.element; e.previous.next = e.next; e.next.previous = e.previous; + e.next = e.previous = null; + e.element = null; size--; modCount++; + return result; } /**