public class LinkedList implements List { private static class Elem { private T value; private Elem previous; private Elem next; private Elem( T value, Elem previous, Elem next ) { this.value = value; this.previous = previous; this.next = next; } } private Elem head; private int size; public LinkedList() { head = new Elem( null, null, null ); head.next = head.previous = head; // circularize size = 0; } public int size() { return size; } public E get( int pos ) { if ( pos < 0 || pos >= size ) { throw new IndexOutOfBoundsException( Integer.toString( pos ) ); } Elem p = head.next; for ( int i=0; i before, after; before = head.previous; after = head; before.next = new Elem( obj, before, after ); after.previous = before.next; } public void remove( int pos ) { if ( pos < 0 || pos > (size-1) ) { throw new IndexOutOfBoundsException( Integer.toString( pos ) ); } Elem left = head; // starts at head, not head.next! for ( int i=0; i < pos; i++ ) { left = left.next; } Elem current = left.next; Elem right = current.next; left.next = right; right.previous = left; size--; } }