= Solution
An absent coordinate already has value zero. If found, unlink its node in both directions:
``
def zeroElement(vector: Node, index: Int): Unit = {
require(vector != null)
require(0 <= index && index < vector.index)
var p = vector.next
while ((p ne vector) && p.index < index) p = p.next
if ((p ne vector) && p.index == index) {
p.prev.next = p.next
p.next.prev = p.prev
}
}
``
Identity comparison with the header prevents treating its dimension field as a data index. The splice preserves reciprocal links even when removing the only data node: the two header links then point to the header again. All other coordinates are unchanged, and an absent coordinate causes no mutation. \b[The <running time> is $O(k)$], with constant work after the node is located.
Back to article page