1: // @author Frank M. Carrano, Timothy M. Henry
2: // @version 5.0
3: public T remove(int givenPosition)
4: {
5: T result = null; // Return value
6: if ((givenPosition >= 1) && (givenPosition <= numberOfEntries))
7: {
8: // Assertion: !isEmpty()
9: if (givenPosition == 1) // Case 1: Remove first entry
10: {
11: result = firstNode.getData(); // Save entry to be removed
12: firstNode = firstNode.getNextNode();
13: if (numberOfEntries == 1)
14: lastNode = null; // Solitary entry was removed
15: }
16: else // Case 2: Not first entry
17: {
18: Node nodeBefore = getNodeAt(givenPosition - 1);
19: Node nodeToRemove = nodeBefore.getNextNode();
20: Node nodeAfter = nodeToRemove.getNextNode();
21: nodeBefore.setNextNode(nodeAfter);
22: result = nodeToRemove.getData();
23: if (givenPosition == numberOfEntries)
24: lastNode = nodeBefore; // Last node was removed
25: } // end if
26: numberOfEntries--;
27: }
28: else
29: throw new IndexOutOfBoundsException(
30: "Illegal position given to remove operation.");
32: return result; // Return removed entry
33: } // end remove