В цикле
for(int n = 0; n<elementCount && word.compareTo(lastAdded.next().toString()) >1; n++){
temp=lastAdded.next();
}
вы всегда сравниваете новое слово с одним и тем же элементом, вместо того, чтобы перебирать список (1a) (и вы продолжаете присваивать temp
одно и то же значение внутри цикла (1b) ). [Обновить] И вы сравниваете вывод compareTo
с 1 вместо 0 (2) . Таким образом - в зависимости от реализации compareTo
- результат может всегда быть ложным. (AFAIK это не относится к String.compareTo
конкретно, поскольку он может возвращать значения больше 1 - но это не гарантируется в целом.) [/ Update]
И затем, независимо от результата ваших проверок, вы всегда добавляете новый элемент после последнего добавленного элемента (3) .
Однако, поскольку вы не настраиваете lastAdded
(4) , он будет продолжать указывать на один и тот же элемент (tail
), поэтому в действительности tail
всегда будет первый элемент в вашем списке, а не последний .
Обновление 2: в обновленном addSort
, вы исправили проблемы (2) и (4) выше, но (1a-b) и (3) все еще там.
Отчасти проблема заключается в том, что для работы односвязного списка вам необходимо постоянно указывать ссылку на заголовок , иначе вы не сможете просмотреть его! Вы как бы пытаетесь использовать lastAdded
для этой цели, но это просто смешивание двух разных вещей, что вызывает дальнейшую путаницу. Обратите внимание, что на самом деле вам не нужна ссылка на последний добавленный узел - эта информация бесполезна, когда вы собираетесь вставить следующий элемент в список. Я рекомендую добавить выделенную ссылку head
на картинку и соответственно изменить код (и удалить lastAdded
, если вы не уверены, что он понадобится вам позже). Обратите внимание, что это не устраняет необходимость в (4) - даже если у вас есть только ссылка head
, вам все равно нужно изменить ее (хотя и не всегда - только при вставке в начале списка).