A bidirectional linked data structure where each node contains two pointer addresses: one linking to the previous node (Prev) and one linking to the subsequent node (Next).
Bidirectional pointers enable both forward and backward traversal throughout the sequence. This eliminates the need to traverse from the head when deleting a node whose reference is already known, achieving true O(1) removal.
Each node holds two address pointers (prev and next). head.prev and tail.next point to NULL.
Reversing the list requires swapping the prev and next pointer references on every node and exchanging head with tail.
Given direct reference to node N, unlinking requires simply N.prev.next = N.next and N.next.prev = N.prev.
Doubly linked lists require two pointer fields per node (double the pointer overhead of singly linked lists), balancing capability with memory cost.