This article already assumes you read or is familiar with the intro to linked list article implementation code as it’s based on it.
To put it simply, in a double-linked list, the elements of the list have 2 pointers, next and previous. It allows us to traverse in both directions since the elements know what element comes next and before. On top of tracking the head element, we also track the tail element as well and because of this extra detail, some operations like “push” are faster.
We can create our double-linked list by extending our previous single-linked list so we inherit some other nice methods and capabilities.