A doubly linked list node has two pointers: pseudocode class DListNode: val: integer prev: DListNode or null next: DListNode or null The prev pointer enables backward traversal and simplifies deletion.
To delete a node when you only have a reference to that node: ```pseudocode node.prev.next = node.next node.next.prev = node.prev
The cost is extra memory (one more pointer per node) and more complex insertion/deletion code (you must update both directions).
Doubly linked lists are needed for implementing LRU caches. Time: $O(1)$. Space: $O(n)$.