创建一个链表,但是对我的删除方法感到困惑。我的清单包含:
Node<String> text1 = new Node<>();
text1.setData("Hello");
Node<String> text2 = new Node<>();
text2.setData("World");
Node<String> text3 = new Node<>();
text3.setData("Test");
将列表删除将是:
card.remove(text1);
一旦执行,该方法应在提示该节点确实已被删除的消息后显示true,但是该方法将永远不会到达while语句内并直接将其返回为false。
我知道问题是我的while语句,但我尝试将其多次更改为:
while (current != null)
while (current != node)
while (current.getNext() != null || current == tail)
while (current != null && current.getNext != node)
等
它将返回false或仅显示NullPointerException错误
public boolean remove(Node node) {
if (listSize == 0) {
throw new IllegalStateException("nothing to delete here :/");
}
boolean result = false;
Node prev = head;
Node current = head;
while (current != null) {
if (node.equals(current.getData())) {
if (listSize == 1) {
head = null;
tail = null;
} else if (current.equals(head)) {
head = head.getNext();
} else if (current.equals(tail)) {
tail = prev;
tail.setNext(null);
} else {
prev.setNext(current.getNext());
}
current.setNext(current.getNext());
listSize--;
result = true;
}
prev = current;
current = prev.getNext();
}
return result;
}
方法运行平稳后,预期输出应如下所示
removed text 3: true (removed)
现在它显示:
remove text 3: false (removed)
答案 0 :(得分:1)
在这里,node
是一个Node
对象,但是您正在将其与String对象进行比较。尝试
node.getData().equals(current.getData())
代替node.equals(current.getData())
进行比较。