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

时间:2018-01-29 17:19:40

标签: 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;
        }
    }    
}

私有节点类(以及Node类中的第一个ElementList

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

1 个答案:

答案 0 :(得分:1)

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

首先:在您的问题评论中引用了这一点。这一行:

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

这里使用的比较可能不是你想要的。请参阅String.compareTo()Javadoc)的文档。

第二:你永远不会在{{1}中更改对firstNode的引用(我假设,您将利用所有地方作为列表的头部) }} 方法。当然remove()会坚持下去;你永远不会改变vvv指向除此之外的任何东西。

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