我正在研究一个将节点附加到链表末尾的项目。但是,我无法在列表中两次添加相同的节点,并且无法像以前自然增加节点一样添加相同的节点,也不会收到消息指出该节点已经存在。这是代码
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;
}
}
答案 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
希望有帮助!