addAt(value, position = 0) {
    if (position === 0) return this.addFirst(value); // <1>
    if (position === this.size) return this.addLast(value); // <2>

    // Adding element in the middle
    const current = this.findBy({ index: position }).node;
    if (!current) return undefined; // out of bound index

    const newNode = new Node(value); // <3>
    newNode.previous = current.previous; // <4>
    newNode.next = current; // <5>
    current.previous.next = newNode; // <6>
    current.previous = newNode; // <7>
    this.size += 1;
    return newNode;
  }
Insert new element at the given position (index)

Runtime: O(n)

@param {any} value new node's value
@param {Number} position position to insert element
@returns {Node|undefined} new node or 'undefined' if the index is out of bound.