java - 从单链表中删除特定元素 Java

标签 java list linked-list nodes singly-linked-list

我是链表新手,在从单链表中删除特定对象时遇到问题。该方法根本不会删除列表中的第一个元素,但它似乎也会同时删除多个节点。

删除方法:

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/

相关文章:

java - 在不同线程中使用对象是否安全,但不能同时使用?

java - + 运算符和字符串

Python For...循环迭代

c++ - 无法取消引用结束列表迭代器

java - 合并排序: Why does my merge method only add one number to the queue?

java - 插入已排序的双向链表

java - ActionBarSherlock 带有选项菜单错误

java - 我们使用 JMS 而不是使用 REST TEMPLATE 来交换信息有什么优势?

python - 根据其值合并元组列表

应用于数据框中列表的 R 函数