Java 函数的作用不是实际删除任何内容
我不明白为什么它不删除最后一个节点……而且我有正常的remove()函数工作正常,这不是问题所在 有什么问题吗Java 函数的作用不是实际删除任何内容,java,linked-list,Java,Linked List,我不明白为什么它不删除最后一个节点……而且我有正常的remove()函数工作正常,这不是问题所在 有什么问题吗 public T removeLast() { Node<T> currentNode, prevNode; currentNode = this.getHead(); while(currentNode != null) { if(currentNode.getNext()
public T removeLast()
{
Node<T> currentNode, prevNode;
currentNode = this.getHead();
while(currentNode != null)
{
if(currentNode.getNext()==null)
{
// prevNode = this.getPrevious(currentNode);
// prevNode.setNext(null);
this.remove(currentNode);
return null;
}
currentNode = currentNode.getNext();
}
return null;
}
public T removeLast()
{
节点currentNode,prevNode;
currentNode=this.getHead();
while(currentNode!=null)
{
if(currentNode.getNext()==null)
{
//prevNode=this.getPrevious(currentNode);
//prevNode.setNext(空);
删除(currentNode);
返回null;
}
currentNode=currentNode.getNext();
}
返回null;
}
这是我的删除函数,我认为它不适用于最后一个节点
private boolean remove(Node<T> aNode)
{
if(aNode==null)
{
return true;
}
else
{
Node<T> prevNode, nextNode;
prevNode = this.getPrevious(aNode);
if(aNode.getNext()==null){
return true;
}
else{
nextNode = aNode.getNext();
prevNode.setNext(nextNode);
}
return true;
}
}
私有布尔删除(节点阳极)
{
如果(阳极==null)
{
返回true;
}
其他的
{
节点prevNode,nextNode;
prevNode=this.getPrevious(阳极);
if(阳极.getNext()==null){
返回true;
}
否则{
nextNode=阳极。getNext();
prevNode.setNext(nextNode);
}
返回true;
}
}
看起来您正在实现一个双链接列表?remove函数实际上是指remove函数中给定节点的前一个节点
问题似乎是当它是最后一个节点时,您实际上没有做任何事情,您只是返回true
要删除列表中的最后一个节点,需要将上一个节点上的下一个引用设置为null,然后返回
private boolean remove(Node<T> aNode)
{
if(aNode==null)
{
return true; // not sure why this returns true... false perhaps?
}
else
{
Node<T> prevNode, nextNode;
prevNode = this.getPrevious(aNode);
// you will also need to check prevNode for null, in the case of the first node.
if(prevNode == null) {
this.setNext(aNode.getNext());
return true;
}
else if(aNode.getNext()==null){
prevNode.setNext(null); // set the previous node's next (aNode) to null.
return true;
}
else{
nextNode = aNode.getNext();
prevNode.setNext(nextNode);
}
return true;
}
}
私有布尔删除(节点阳极)
{
如果(阳极==null)
{
return true;//不确定为什么返回true…可能是false?
}
其他的
{
节点prevNode,nextNode;
prevNode=this.getPrevious(阳极);
//对于第一个节点,还需要检查prevNode是否为null。
if(prevNode==null){
this.setNext(阳极.getNext());
返回true;
}
else if(阳极.getNext()==null){
prevNode.setNext(null);//将上一个节点的next(阳极)设置为null。
返回true;
}
否则{
nextNode=阳极。getNext();
prevNode.setNext(nextNode);
}
返回true;
}
}
请注意,既然这里似乎有一个双链接列表,为什么不使用最后一个元素的前一个节点来确定要删除哪一个,而不是从头开始迭代?为什么要将问题标记为
c
?无论发生什么情况,为什么都要返回“null”@NeilLocketz它必须返回一些东西。我不认为这是问题所在……是吗?我会a)调试并b)检查remove
是否与最后一个节点有任何问题。@SJuan76我认为你是对的……remove与最后一个节点不起作用。我已将该函数添加到Post中。您是否也需要第一个节点的特殊情况?是的,您需要在将prevNode指定给参数节点的引用之前进行检查。如果这样做,那么逻辑将变得相同,只需将“this”上的节点引用设置为null。