【问题标题】:Removing Specific Element from Singly Linked List Java从单链表 Java 中删除特定元素
【发布时间】:2018-07-08 11:12:08
【问题描述】:

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

删除方法:

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;
        }
    }    
}

私有节点类(和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

【问题讨论】:

  • 您的意思是== 0 而不是&lt; 0

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


【解决方案1】:

你至少有两个问题。可能更多。没有更完整的代码很难说。

第一:这是在对您的问题的评论中引用的。这一行:

if (e.getString1().compareTo(temporary.next.getElement().getString1()) < 0)

此处使用的比较可能不是您想要的。请参阅String.compareTo() (Javadoc) 的文档。

第二:您从未在您的remove() 方法中实际更改对firstNode 的引用(我假设您在任何地方都使用它作为列表的头部)。当然vvv 会留下来;你永远不会改变 firstNode 来指向除此之外的任何东西。

我怀疑这是家庭作业,所以我不会提供问题的代码答案,但这些应该可以告诉您问题出在哪里。如果这不是家庭作业;绝对使用内置的 Java 列表而不是自己制作。

【讨论】:

    猜你喜欢
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多