Я думаю, что есть ошибка в реализации метода at: put: LinkedList.
Я обнаружил проблему при использовании класса Stack, потомка LinkedList. При использовании метода at: put: для присвоения значения последнему элементу списка другие элементы исчезли из списка. Это произошло, когда последний элемент указал на какой-то другой, уже находящийся в списке. Я сомневаюсь, это ошибка или особенность.
s := LinkedList new.
x := (NewValueHolder value: 99).
s
add: (NewValueHolder value: 99);
add: x;
add: (NewValueHolder value: 99);
add: (NewValueHolder value: 99).
s at: 4 put: x.
s
После запуска список содержит только 2 элемента, а не 4, как ожидалось.