Java LinkedList remove()、next、prev和head

Java LinkedList remove()、next、prev和head,java,Java,我需要从(自定义)LinkedList中删除(),将上次迭代的项设置为null。有两种情况,一种是prev为head,另一种不是head。节点是next、prev和head。我想知道您是否发现了以下代码中的任何问题?我需要在两者之间设置迭代器变量吗?(或者清空prev会成功吗?) public void remove() { if(prev == null) { throw new IllegalStateException(); } else { if(prev == hea

我需要从(自定义)LinkedList中删除(),将上次迭代的项设置为null。有两种情况,一种是prev为head,另一种不是head。节点是next、prev和head。我想知道您是否发现了以下代码中的任何问题?我需要在两者之间设置迭代器变量吗?(或者清空prev会成功吗?)

public void remove() { 
if(prev == null) {
    throw new IllegalStateException();
}
else {
    if(prev == head){
        head = head.next;
        prev = null;
        sizeOfList--;
        }
    else {
        prev = null;
        sizeOfList--;
    }
}
}

如果您的上一个节点不是头(代码中的第二个),您应该在
prev
之前修复上一个节点的下一个链接。否则,它将指向
prev

这种情况非常简单,可以在单元测试中详尽地描述-删除一个项目列表上的项目(受害者是头部),删除一个有两个项目的列表的尾部(受害者的prev是头部),删除一个有三个项目的列表的尾部(受害者的prev是内部的)。我强烈建议你那样做!嗨,伊瓦罗,谢谢你的回答!我了解如何创建一个prev节点(last-next,即prev=next)。但是如何在prev之前写入节点?谢谢你的时间!在遍历列表时,必须跟踪此元素。另一种方法是更改函数以删除当前元素,而不是前一个元素,在这种情况下,您只需要prev和当前节点!我现在唯一的问题是,以下哪一项是不需要更新的(在If head子句中:head->head.next,next->head,prev->head)…和else子句:beforeprov.next->prev.next,prev->prev.next,next->prev.next。非常感谢你的帮助!我不明白你在问什么,真的。对不起,在else子句中,接下来应该是什么?