У меня есть класс Java, который состоит из списка узлов, WordNode
, который имеет атрибуты класса Word
и объект WordNode под названием next
используется в качестве ссылки на следующий узел следующим образом:Java LinkedList удаление последнего узла
class WordNode
{
Word word;
WordNode next;
WordNode(Word w)
{
word = w;
next = null;
}
Word getWord()
{
return word;
}
}
а класс Word
имеет строку под названием name
:
class Word
{
String name;
Word(String n)
{
this.name = n;
}
public String getName()
{
return name;
}
public void setName(String n)
{
name = n;
}
}
у меня есть класс, который является обычай LinkedList, к которому я должен добавлять и удалять слова, SPECI сражаясь за имя слова. Я могу добавить без проблем, но когда я хочу удалить, у меня есть некоторые проблемы. Ниже приведен метод удаления:
boolean remove(Word w)
{
WordNode wm = new WordNode(w);
if (list == null) return false; //can't delete on an empty list
else
{
WordNode aux = list;
while(aux != null)
{
if (wm.word.getName().compareTo(aux.word.getName()) == 0) //if the word to delete is found
{
if (aux.next == null) //to erase the last element
{
aux = null;
}
else
{
aux.word.setName(aux.next.word.getName()); //set current node's name to equal next node's
WordNode temp = aux.next.next;
aux.next = null; //to erase current node
aux.next = temp; //re-refer
}
return true;
}
else aux = aux.next;
}
return false; //reachable if word is not found
}
}
Где list
должен быть LinkedList, который содержит все узлы. aux
- это вспомогательный список, который будет циклически проходить через list
, чтобы избежать не связывания. Итак, если я захочу удалить WordNode, я сравню имена. Это на самом деле удаления хорошо, когда узел находится в любом месте, за исключением последний узел:
if (aux.next == null) //to erase the last element
{
aux = null;
}
Я надеюсь сделать этот узел нуль, чтобы отметить новый конец списка, но это не делает стирайтесь. Что я могу изменить, чтобы стереть последний элемент? Спасибо за любую помощь/предложения заблаговременно
aux = null просто устанавливает вашу ссылку на объект, aux, на null. Лучший способ - просто aux.prev.next = null – Ben
Однако у меня нет поля 'prev'. Но разве это не так, как 'aux = null'? – gfcf14
'if (aux.next == null)' просто скажу вам, что ваш aux - последний узел в списке. Установка ссылки на последний элемент на null не влияет на предыдущий узел, потому что его следующий узел до ссылки на элемент, который, по вашему мнению, был удален. Вот почему вам нужно отслеживать свой предыдущий узел. – Kalenda