Adding to a doubly-linked list: public void add(int index, E element) { if (index < 0 || index > numElements) throw new InvalidArgumentException(); Node newNode = new Node(element); if (head == null) { // list is empty, index must be 0 head = newNode; tail = newNode; } else if (index == 0) { // insert before head newNode.next = head; head.prev = newNode; head = newNode; } else if (index == numElements) { // insert after tail newNode.prev = tail; tail.next = newNode; tail = newNode; } else { // general case Node nodeRef = head; for (int i = 1; i < index; i++) nodeRef = nodeRef.next; // nodeRef now points to the node before the insert point // see course notes for pictures! newNode.next = nodeRef.next; nodeRef.next = newNode; newNode.prev = nodeRef; newNode.next.prev = newNode; } numElements++; }