code: public BasicDoubleLinkedNode<V> insertAsPrevious(V value, boolean overrideNullValue) {
  
      if (overrideNullValue && (getValue() == null)) {
        setValue(value);
        return this;
      } else {
        BasicDoubleLinkedNode<V> node = new BasicDoubleLinkedNode<>();
        node.setValue(value);
        node.setNext(this);
        this.previous = node;
        return node;
      }
    }
docs: This method inserts the given {@code value} into the list at the position represented by this node. It will
  typically create a new node containing the given {@code value} and {@link #setNext(AbstractLinkedNode) set it as
  next}. It will guarantee the following equation:
  
  <pre>
  this.{@link #getNext()}.{@link #getPrevious()} == this
  </pre>
  
  If {@code overrideNullValue} is {@code true} and the {@link #getValue() value} of this node is {@code null}, then
  its value is set to the given {@code value} instead of creating a new node.
  
  @param value is the value to insert.
  @param overrideNullValue - {@code true} if a {@link #getValue() value} of {@code null} should be replaced with the
  given {@code value}, {@code false} otherwise.
  @return the node containing the given {@code value}.