1: protected Node getFirstNode() 2: { 3: return firstNode; 4: } // end getFirstNode 5: /** Adds a node to the beginning of a chain. */ 6: protected void addFirstNode(Node newNode) 7: { 8: assert newNode != null : "null argument in addFirstNode"; 9: newNode.setNextNode(firstNode); 10: firstNode = newNode; 11: numberOfEntries++; 12: } // end addFirstNode 13: /** Adds a node to a chain after a given node. */ 14: protected final void addAfterNode(Node nodeBefore, Node newNode) 15: 16: /** Removes a chain’s first node. */ 17: protected final T removeFirstNode() 18: 19: /** Removes the node after a given one. */ 20: protected final T removeAfterNode(Node nodeBefore) 21: public T remove(int givenPosition) 22: { 23: T result = null; 24: 25: if ((givenPosition >= 1) && (givenPosition <= getLength())) 26: { 27: assert !isEmpty(); 28: 29: if (givenPosition == 1) // Case 1: Remove first entry 30: result = removeFirstNode(); 31: else // Case 2: givenPosition > 1 32: { 33: Node nodeBefore = getNodeAt(givenPosition - 1); 34: result = removeAfterNode(nodeBefore); 35: } // end if 36: return result; // Return removed entry 37: } 38: else 39: throw new IndexOutOfBoundsException( 40: "Illegal position given to remove operation."); 41: } // end remove