Абсолютно простую реализацию связанного списка можно только (эффективно) добавить в начало. Чтобы добавить к хвосту, вам нужен второй указатель, который указывает на текущий последний элемент.
Пользователи, вероятно, хотят иметь возможность добавлять к любому концу, а также иметь возможность запрашивать длину списка в постоянное время и перемещаться по списку от хвоста к голове (что означает, что вам нужен двойной связанный список), поэтому разумная реализация по умолчанию должна поддерживать это (как в java.util).
Вы будете использовать односвязные списки только в том случае, если сможете оправдать ограниченную функциональность и получить реальную выгоду взамен (например, совместное использование хвостов для сокращения требований к хранилищу). ConcurrentLinkedQueue представляется односвязным, чтобы обеспечить параллельный доступ без блокировки. Компромисс невозможности узнать текущую длину упоминается в Javadocs.