java - 在java中从头开始创建一个链表但删除方法不起作用
问题描述
创建一个链接列表,但对我的删除方法感到困惑。我的清单包含:
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)
解决方案
在这里,node
是一个Node
对象,但您将它与 String 对象进行比较。尝试
node.getData().equals(current.getData())
而不是node.equals(current.getData())
比较。
推荐阅读
- javascript - 如何正确滑过 GSAP Slider 的指标?
- android - 使用 quickblox 面临跨平台通知问题
- c++ - 函数可见性导致内存泄漏
- openshift - 如何在 OpenShift 下使用 unrar 创建 pod?
- postgresql - 如何在 PostgreSQL 中连接 string_arr
- sql - 如何通过存储过程更新表的多行?
- wpf - 如何从另一个控件(例如按钮)触发用户控件中的操作
- javascript - 如何防止进入 vue-form-wizard 中的下一个选项卡?
- javascript - 当角度 8 中存在大量数据时,性能会降低
- jquery - 删除图标未出现在 dropzone 中