有人能告诉我我的代码中缺少什么。我试图删除给定节点值的第一次出现。
它失败了很少的测试用例,但我不确定我错过了什么。这是我的代码:
public boolean remove(E obj) {
if (obj == null)
throw new IllegalArgumentException("Violation of precondition : remove(E obj)");
DoubleListNode<E> current = head;
for (int i = 0; i < size; i ++) {
if (current.getData().equals(obj)) {
E result = remove(i);
return true;
}
current = current.getNext();
}
size --;
return false;
}
if块中对remove()的递归调用看起来是错误的。
您已经在列表中,您确定了第一个匹配的对象。所以现在你的代码必须真正删除那个匹配的对象。删除意味着相应地更新两个链接。
把这些东西写在纸上!绘制带有节点的双链表以及它们之间的链接。然后问问自己,删除有一个或两个链接进入(并可能会出去)的节点实际意味着什么。您必须更改上一个节点和要删除的节点后面的链接!