【问题标题】:Java : check if node exists in linked listJava:检查节点是否存在于链表中
【发布时间】:2019-12-01 12:33:14
【问题描述】:

我正在开发一个将节点附加到链表末尾的项目。但是,我不能在列表中添加两次相同的节点,并且当我添加与之前相同的节点时,节点自然会增加,并且我没有收到说明该节点已经存在的消息。这是代码

public int append(int item) {    
    ItemNode node = new ItemNode(item);    
    if (this.empty()) {
        first = node;
        last = node;
        nbNodes++;
    } else if (node == findNode(item)) {
        System.out.println("Node already exists");
    } else {
        last.next = node;
        last = node;
        nbNodes++;    
    }
    return nbNodes;
}

private ItemNode findNode(int key) {    
    if (this.empty()) {
        return null;
    } else {    
        ItemNode current = this.first;    
        while (current.item != key) {
            if (current.next == null) {
                return null;
            } else {
                current = current.next;
            }
        }
        return current;
    }
}

【问题讨论】:

  • node==findNode(item) - 这是错误的。您应该在您的 ItemNode 类中使用 equals() 并覆盖 equals()
  • 只要检查它是否不为空,if(findNoe(item) != null) { ...}
  • 我不想只检查它是否为空我想检查一个节点是否已经存在
  • 这可能对你有帮助 - stackoverflow.com/questions/13387742/…
  • 我早发现了

标签: java list find nodes


【解决方案1】:

正如 Eran 已经提到的,您应该根据需要通过覆盖来使用 equals。 您没有收到消息的原因是您正在比较新创建对象的引用。

ItemNode node = new ItemNode(item); 

与现有的,即

node == findNode(item).// Here findNode will return an existing node, so they are not pointing to same object

可能的解决方案:

1) 你可以让你的 findNode(int key) 返回一个布尔类型。这样,如果找到具有给定键的节点,则可以返回 true 或 false。

2) 或者您可以比较两者的项目,即

else if(node.item == findNode(item).item) // assuming item is of primitive int type

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2016-08-29
    相关资源
    最近更新 更多