链接列表从尾部删除

时间:2014-05-15 10:34:18

标签: java data-structures linked-list

我试图从单个链接列表中删除。我没有尾部变量,它引用了列表中的最后一项。因此这是我的实现。我的问题是 while while循环如果我设置current=null;它不起作用(它不会删除最后一个节点)。我必须设置current.next=null;
但是我需要为current.next=null;添加 next 。即使我说current = null;并不意味着节点当前为空。有人请解释为什么我必须在那里使用?

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;}
}

3 个答案:

答案 0 :(得分:1)

执行current=null;时,将(本地)变量current设置为null,但仍然在列表中指向相同的对象,您希望列表中的对象指向使用next成员(someobject.next)停止指向最后一个对象,因此您需要更改someobject.next的值,例如someobject.next = null;

答案 1 :(得分:1)

current是对链接列表中当前位置的引用。在while循环之后,current引用倒数第二个项目。当您说current.next = null时,您将当前对象next变为null。这使得当前对象成为最后一个对象。

当您说current = null时,您只需将本地参考变量设置为null。换句话说,它不再引用您的列表。它指的是null

答案 2 :(得分:0)

为什么不使用List接口的remove方法?

LinkedList<String> sss = new LinkedList<String>();
sss.add("a");
sss.add("b");
sss.remove(sss.size() - 1); // removes "b"