Doubly linked lists allow nodes to link in both directions by including pointers to both the next and previous nodes. Each node contains three pieces of data - the node value and pointers to both the previous and next nodes. This allows traversal in both forward and backward directions. Doubly linked lists require more memory than singly linked lists since each node needs an extra pointer, but provide advantages like easy deletion of nodes and ability to traverse the list in either direction.