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).