Footprints in both directions

Doubly Linked Lists

The analogy

Now each clue also says where you came from, so you can walk the hunt backwards. It costs a bit more paper on every clue, but you are never stuck facing one way.

Visualizer

Footprints in both directions

step 1 / 12
headโ†’4โ†’8โ†’15โ†’16โ†’null

Same list, but every node now also remembers where it came from. Two pointers per node instead of one.head โ‡„ 4 โ‡„ 8 โ‡„ 15 โ‡„ 16 โ‡„ null

def remove(node):
    node.prev.next = node.next
    node.next.prev = node.prev
# O(1) โ€” no search for a predecessor

from collections import deque
d = deque([4, 8, 15])
d.appendleft(1)   # O(1) at BOTH ends
d.pop()           # O(1)
Check yourself

The extra prev pointer buys youโ€ฆ