如何检查链表是否有重复的条目



该方法应该检查链表中是否有多个相同的条目。我试着用这种方法来检查头部是否等于当前节点,然后让电流等于current.next,如果头部从不等于电流,我让头部等于head.next,并通过将其分配给firstNode来重新启动电流。当我尝试测试代码时,它给了我以下错误:

java.lang.NullPointerException在LinkedBag1.hasDuplicateEntries(LinkedBag1.java:182)Java:182是while((!head.equals(current)) || (current != null)){

不确定这是什么意思,是什么导致我的方法使这个错误出现。

    public boolean hasDuplicateEntries(){
    Node head = firstNode;
    Node current = head.next;
    boolean duplicate = true;
    while((!head.equals(current)) || (current != null)){
        if(head.equals(current)) {
            duplicate = true;
        }
        else{
            current = current.next;
        }
        current = firstNode;
        head = head.next;

    }

    return duplicate;
}

我的方法有什么地方做错了吗?

我认为你的问题是head = head.next;什么是head.next在你的列表中的最后一个节点?当您将head设置为该值然后循环并再次检查head.equals(current)时会发生什么?

(也,也许你已经意识到这一点,但我认为你的算法只会工作,如果重复的条目是彼此相邻。)

不确定异常,但该方法将始终返回true,因为您在初始化时将"duplicate"设置为true,并且仅在稍后将其设置为true(需要"boolean duplicate = false;")

public boolean hasDuplicateEntries() {
    int currentIndex = 0;
    for (Node current = head; current != null; current = current.next) {
        //with each node in list, compare it to all element of list
        int nodeIndex = 0;
        for (Node node = head; node != null; node = node. next) {
            if (currentIndex != nodeIndex && node.equals(current)) {
                return true;
            }
            nodeIndex++;
        }
        currentIndex++;
    }
    return false;
}

是否要删除重复元素?因此,您可以使用一些不能包含重复项的日期结构,如Set.

相关内容

  • 没有找到相关文章

最新更新