Node
class DNode {
T val;
DNode prev, next;
} Advertisement
Insert after
void insertAfter(DNode node, T val) {
DNode n = new DNode<>();
n.val = val;
n.next = node.next;
n.prev = node;
if (node.next != null) node.next.prev = n;
node.next = n;
} Advertisement
Delete node — O(1)
void delete(DNode n) {
if (n.prev != null) n.prev.next = n.next;
if (n.next != null) n.next.prev = n.prev;
} LRU cache use case
DLL + HashMap: HashMap → DNode reference, DLL for order. Both O(1).