[英]Linked list removing from tail
我試圖從單個鏈接列表的末尾刪除。我沒有尾部變量來保持對列表中最后一項的引用。因此這是我的實現。我的問題是在while循環之后,如果我將current=null;
設置為current=null;
它不起作用(它不會刪除最后一個節點)。我必須設置current.next=null;
。
但是,我有什么下一步添加current.next=null;
即使我說current = null; 這並不意味着將當前節點指向null。有人可以解釋一下為什么我必須在那里使用next嗎?
public void removeFromTail() throws EmptyStackException{
if(head==null){
throw new EmptyStackException("can't delete .Empty list");}
else if(head.next==null){
head=null;
}
else{
ListNode current=head;
while(current.next.next!=null){
current=current.next;
}
current.next=null;}
}
當您執行current=null;
您將(local)變量current
為null
,但是仍然在列表中指向同一對象,但您希望列表中的對象指向帶有next
成員( someobject.next
)的最后一個對象,因此不再指向該對象,因此您需要更改someobject.next
的值,例如someobject.next = null;
current
是對鏈接列表中當前位置的引用。 在while循環之后, current
是倒數第二個項目。 當您說current.next = null
,使當前對象的next
成為null
。 這使當前對象成為最后一個對象。
當您說current = null
,您只是將本地引用變量設置為null
。 換句話說,它不再引用您的列表。 它指的是null
。
為什么不使用List接口的remove方法?
LinkedList<String> sss = new LinkedList<String>();
sss.add("a");
sss.add("b");
sss.remove(sss.size() - 1); // removes "b"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.