我是链表新手,在从单链表中删除特定对象时遇到问题。该方法根本不会删除列表中的第一个元素,但它似乎也会同时删除多个节点。
删除方法:
public void remove(Element e)
{
Node dummy = new Node(null);
dummy.next = firstNode;
Node temporary = dummy;
while (temporary.next != null)
{
if (e.getString1().compareTo(temporary.next.getElement().getString1()) < 0)
{
temporary.next = temporary.next.next;
}
else
{
temporary = temporary.next;
}
}
}
私有(private)节点类(以及 ElementList
类中的第一个 Node
)
Node firstNode = null; private class Node
{
Element value;
Node next = null;
private Node(Element e)
{
this.value = e;
}
public Element getElement()
{
return value;
}
}
演示方法:
list.add(vvv);
list.add(eee);
list.add(ddd);
list.remove(eee);
System.out.println(list); //<- Output: all three objects still appear
list.remove(vvv);
System.out.println(list); //<- Output: vvv is there, for some reason
eee and ddd are now gone
list.remove(ddd);
System.out.println("Break between last element and empty list");
System.out.println(list); //<- Output: vvv is still there
最佳答案
您至少有两个问题。可能更多。如果没有更完整的代码,很难说。
第一:这是在对您的问题的评论中引用的。这一行:
if (e.getString1().compareTo(temporary.next.getElement().getString1()) < 0)
此处使用的比较可能不是您想要的。请参阅 String.compareTo()
的文档(Javadoc)。
第二:您实际上从未更改对 firstNode
的引用。 (我假设您在任何地方都使用它作为列表的开头)在您的 remove()
中方法。当然vvv
会留下来;你永远不会改变firstNode
指向除此之外的任何东西。
我怀疑这是家庭作业,所以我不会提供问题的代码答案,但这些应该可以告诉您问题出在哪里。如果这不是家庭作业;绝对使用内置的 Java 列表,而不是创建自己的列表。
关于java - 从单链表中删除特定元素 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48506651/