【问题标题】:Linked list removing from tail链表从尾部移除
【发布时间】:2014-07-03 18:05:48
【问题描述】:

我试图在最后从单个链接列表中删除。我没有一个尾部变量来保持对列表中最后一项的引用。因此这是我的实现。我的问题是 之后while循环如果我设置current=null;它不起作用(它不会删除最后一个节点)。我必须设置current.next=null;
但是我必须为current.next=null; 添加 next 什么。即使我说 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;}
}

【问题讨论】:

    标签: java data-structures linked-list


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 我自己写这个只是为了练习
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        • 2016-07-23
        • 2016-07-06
        • 1970-01-01
        • 2018-11-24
        • 2015-06-05
        • 1970-01-01
        相关资源
        最近更新 更多