簡體   English   中英

鏈接列表從尾部刪除

[英]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)變量currentnull ,但是仍然在列表中指向同一對象,但您希望列表中的對象指向帶有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM