我有一个Java类,它包含一个节点列表WordNode
,它具有类Word
的属性和一个名为next
的WordNode对象,用作对下一个节点的引用,如下:
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,我必须通过指定单词名称来添加和删除单词。我可以毫无问题地添加,但是当我想删除时,我有一些问题。以下是删除方法:
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;
}
我希望将该节点设为null以标记列表的新结尾,但它不会被删除。我可以更改什么来擦除最后一个元素?感谢您提前提供任何帮助/建议
答案 0 :(得分:2)
你必须清除WordNode"" next"指针。因为你没有"之前的"指针,您必须手动跟踪以前的WordNode。
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;
WordNode prev = aux;
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
{
prev.next = null;
// Takes care of the case of a one-item list
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 {
prev = aux;
aux = aux.next;
}
return false; //reachable if word is not found
}
}
答案 1 :(得分:0)
添加head
节点。
然后在检查最后一个节点时,您将拥有:
if (aux.next == null) //to erase the last element
{
aux.head.next = null;
}