There are different types of linked list. In this section, we are going to cover the doubly linked list. The difference between a doubly linked list and a normal linked list is that in a linked list we make the link from one node to the next one only, while in a doubly linked list, we have a double link: one for the next element and one for the previous element, as shown in the following diagram:

Let's get started with the changes that are needed to implement the DoublyLinkedList class:
class DoublyNode extends Node { / {1}
constructor(element, next, prev) {
super(element, next); / {2}
this.prev = prev; / {3} NEW
}
}
class DoublyLinkedList extends LinkedList { / {4}
constructor(equalsFn = defaultEquals) {
super(equalsFn); / {5}
this.tail = undefined; / {6} NEW
}
}
As the DoublyLinkedList class is a special type of LinkedList, we will...