Mental Model
A doubly linked list has nodes connected forward and backward. To add a new node at the end, we link it after the last node and update pointers.
Analogy: Imagine a train where each carriage is connected to the one before and after. Adding a new carriage at the end means hooking it to the last carriage and making sure both know about each other.
head -> [1] ↔ [2] ↔ [3] -> null null ← [1] ↔ [2] ↔ [3] ← tail