我做了这个删除最后一个函数,看起来它应该可以工作,但是当我调用它时,它实际上并没有删除任何东西,所有节点仍然存在。
有什么问题吗?
public Object removeLast()
{
Node currentNode;
currentNode = this.getHead();
while(currentNode != null)
{
if(currentNode.getNext()==null)
{
currentNode = null;
return null;
}
currentNode = currentNode.getNext();
}
return null;
}
最佳答案
您有一个包含节点的列表。每个节点都包含一个指向下一个节点的指针。
要从列表中删除节点,必须将上一个节点的下一个指针设置为null
如果您还具有指向上一个元素的指针,那么这很简单。就像是:
public Object removeLast()
{
Node currentNode;
currentNode = this.getHead();
while(currentNode != null)
{
if(currentNode.getNext()==null)
{
// The line below is changed!!!
currentNode.getPrevious().setNext(null);
return null;
}
currentNode = currentNode.getNext();
}
return null;
}
如果您在每个节点中都有指向下一个节点和上一个节点的指针,那么我们将此称为双向链接列表。
同样,不需要将返回类型设置为
Object
,您可以将方法签名更改为:public void removeLast()
然后将每个
return null;
更改为return;