gpt4 book ai didi

Java LinkedList 删除最后一个节点

转载 作者:行者123 更新时间:2023-11-30 03:40:19 25 4
gpt4 key购买 nike

我有一个 Java 类,它由一个节点列表 WordNode 组成,它具有类 Word 的属性和一个名为 next 的 WordNode 对象code> 用作下一个节点的引用,如下:

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 是一个辅助列表,它将循环遍历列表以避免取消链接。因此,如果我选择删除 WordNode,我会比较名称。实际上,当节点位于任何位置(除了最后一个节点)时,它都可以很好地删除:

if (aux.next == null) //to erase the last element
{
aux = null;
}

我希望将该节点设置为空以标记列表的新结尾,但它不会被删除。我可以更改什么来删除最后一个元素?感谢您提前提供的任何帮助/建议

最佳答案

您必须清除 WordNode 的“下一个”指针。由于您没有“前一个”指针,因此您必须手动跟踪前一个 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
}
}

关于Java LinkedList 删除最后一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com