Java:检查节点是否存在于链表中

时间:2019-12-01 12:33:14

标签: java list find nodes

我正在研究一个将节点附加到链表末尾的项目。但是,我无法在列表中两次添加相同的节点,并且无法像以前自然增加节点一样添加相同的节点,也不会收到消息指出该节点已经存在。这是代码

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

1 个答案:

答案 0 :(得分:0)

正如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键)返回一个布尔类型。这样,如果找到具有给定键的节点,则可以返回true或false。

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

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

希望有帮助!