* @return The element being removed or null if no such element is in the list.
     */
    public E remove(E e) {
        Node<E> curr = head;
        E temp;

        if (head == null) {
            return null;
        }
        //Because we only have a next pointer and we must fix the pointers to remove the desired element, we must
        // search from one node behind. This results in head being left out, so we check that first as an edge case.
        else if (curr.getValue().equals(e)) {
            temp = curr.getValue();
            head = curr.getNext();

            size--;
            return temp;
        } else {
            while (curr.getNext() != null) {
                if (curr.getNext().getValue().equals(e)) {
                    temp = curr.getNext().getValue();
                    curr.setNext(curr.getNext().getNext());

                    size--;
                    return temp;
                } else {
                    curr = curr.getNext();
                }
            }
        }

        //because if it gets to here, nothing is found
        return null;
    }