При работе со структурами данных может быть особенно полезно поработать с диаграммой того, что на самом деле происходит, прежде чем пытаться ее кодировать. Давайте посмотрим:
Как мы видим, нам просто нужно указать prev на узел за пределами cur (узел, который нам нужно удалить). Шаги следующие:
1) Объявите два узла, первый указывает на первый (предыдущий), второй указывает на узел после предыдущего.
2) Используйте цикл while для приращения cur и prev в правильные положения (cur должен указывать на удаляемый узел).
3) Удалить узел с одной строкой кода (prev.next = cur.next).
4) Уменьшение количества и вы закончите.
(Если вам нужно позиционировать для операции addLast, просто переместите cur на последний узел, т.е. cur = cur.next, а cur.next! = Null).
Полный код для удаления по значению выглядит следующим образом:
public void remove(T element){
Node<T> cur = first.next;
Node<T> prev = first;
Node<T> nn = new Node(element);//I'm assuming you have constructors that accept data
boolean deleted = false;
while(cur!=null&&deleted == false){
if(cur.data.equals(element)){
prev.next = cur.next;
this.count--;
deleted = true;
}
}
prev = gotolastnode(prev);
prev.next = nn;
}
Это должно работать в соответствии с вашей подписью метода для удаления. Однако вам может потребоваться изменить ваш метод gotolastnode, чтобы эта работа работала.