docs: public void add(int index, Object element) {
  
          if (index == size()) {
              add(element);    //Add to the end of this.
          }
  
          //If index > size() an exception should be thrown with a slightly
          //different message than the exception thrown by getInternal.
          else if (index > size()) {
              throw new IndexOutOfBoundsException("Index out of bounds: "
                                                  + index + " > " + size());
          } else {
              Node current = getInternal(index);
              Node newNext = new Node(current.data, current.next);
  
              current.data = element;
              current.next = newNext;
  
              elementCount++;
  
              //If they inserted at the last valid index, then a new last element
              //was created, therfore update the last pointer
              if (last == current) {
                  last = newNext;
              }
          }
      }