docs: protected final Node getInternal(int index) {
  
          //Check preconditions for the index variable
          if (index >= size()) {
              throw new IndexOutOfBoundsException("Index out of bounds: "
                                                  + index + " >= " + size());
          }
  
          if (index < 0) {
              throw new IndexOutOfBoundsException("Index out of bounds: "
                                                  + index + " < 0");
          }
  
          if (index == 0) {
              return first.next;
          } else if (index == (size() - 1)) {
              return last;
          } else {
              Node pointer = first.next;
  
              for (int i = 0; i < index; i++) {
                  pointer = pointer.next;
              }
  
              return pointer;
          }
      }