我试图从我的列表中删除一个节点,但该节点没有消失。该方法应该遍历列表并检查toDelName ==是否有任何名称节点。如果是,那么它将删除该节点。
public static void removeName(String toDelName, Names list)
{
Names current = list;
while (current.next != null)
{
if (current.name.equalsIgnoreCase(toDelName))
{
current.prev.next = current.next;
current.next.prev = current.prev;
}
current.prev = current;
current = current.next;
}
}
- 当你的条件不匹配时,继续前进。所以不需要
current.prev = current;
。 -
当你需要删除列表的最后一个节点时,你也没有处理这种情况。
public void removeName(String toDelName, Names list) { Names current = list; while (current.next != null) { if (current.name.equalsIgnoreCase(toDelName)) { current.prev.next = current.next; current.next.prev = current.prev; return; } current = current.next; } if (current.name.equalsIgnoreCase(toDelName)) { current.prev.next = null; } }
//打印检查列表
public static void print(Names start) {
while (start != null) {
System.out.println(start.getName());
start = start.getNext();
}
}
您的问题源自以下这行:
current.prev = current;
你应该删掉那一行。原因是,每次这行被执行时,都是当前的。Prev被设置为当前。因此,在while循环的第一次迭代之后,current.prev.next(您尝试在if-case中赋值)将始终具有值current。下一个-你的作业
current.prev.next = current.next;
因此什么也不做。
您可能试图以某种方式使用名称current更新对象。然而,这在面向对象编程中是不必要的。值current。Prev指向当前被分配给current.next时的更改