首页 > 解决方案 > 在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)

标签: javalinked-list

解决方案


在这里,node是一个Node对象,但您将它与 String 对象进行比较。尝试 node.getData().equals(current.getData())而不是node.equals(current.getData())比较。


推荐阅读