Эта строка:
last.next = new Node<>(e, null);
должна добавить NullPointerException
при добавлении первого элемента в список, потому что first
и last
должны быть null
когда список пуст.Тот факт, что он, по-видимому, не содержит ошибок, означает, что last
должен указывать на действительный объект Node
, прежде чем вы добавите что-либо в свой список.В вашем посте нет всего вашего кода, но я уверен, что вы создаете новый Node
и указываете на него first
и last
, когда вызываете конструктор списка, что означает, чтоваш список будет начинаться с «пустого» узла.
То, что вы должны сделать , должно начинаться с first
и last
, равных null
.Затем сделайте что-то подобное в вашем add()
методе:
public void add(E e) {
Node newNode = new Node<>(e, null);
if(first == null) {
first = newNode;
last = newNode;
} else {
last.next = newNode;
last = last.next; // Or just last = newNode;
}
++size;
}
Также вам нужно немного поработать над вашим toString()
методом, потому что эта строка:
while (n.next != null) {
будетзаставьте ваш цикл обходить последний элемент в списке (так как его значение для next
элемента списка равно нулю).