我试图从单个链接列表中删除。我没有尾部变量,它引用了列表中的最后一项。因此这是我的实现。我的问题是 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;}
}
答案 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"