[英]Java LinkedList removing the last node
我有一個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,以將列表標記為新的結尾,但不會被擦除。 我可以更改哪些內容來擦除最后一個元素? 感謝您的任何幫助/建議
您必須清除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
}
}
添加head
節點。 然后,在檢查最后一個節點時,您將擁有:
if (aux.next == null) //to erase the last element
{
aux.head.next = null;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.