【发布时间】:2015-04-28 06:27:33
【问题描述】:
您好,我正在尝试根据密钥删除节点。我正在学习字典实现,并决定从头开始实现它以充分理解这个概念。我成功地能够使用 2 个节点引用头尾指针来添加和返回值。但是我很难使用密钥从列表中删除一个节点。 以下是我要从列表中删除的代码
public V remove(K key) {
V result = null;
if(!this.isEmpty()&&head==tail){ //if head and tail are only nodes in the list
if(tail.getKey().equals(key)){
result = tail.getValue();
head=null;
tail = null;
count--; //decrements the count in the list
}
}
else {
boolean found = false;
Node current = head;
Node previous = null;
while(current!=null&&!found){
if(current.getKey().equals(key)){
previous = current;
result = current.getValue();
previous.setNextNode(current.getNextNode());
previous.setNextNode(null);
count--;
found = true;
}
current = current.getNextNode();
}
}
return result;
}
当我输入要删除的所需密钥时。它会删除要删除的所需键之后的所有键。 PS这不是一个双链表。我刚刚创建了一个尾节点来访问列表中的最后一个节点
【问题讨论】:
-
你遇到了什么问题?
-
@nitegazer2003 当我输入要删除的密钥时,它会删除所需密钥之后的所有密钥。
-
你的逻辑错了。
-
@TimBiegeleisen 我同意逻辑有问题,但我在纸上画了出来并遍历了节点。问题是当我找到要删除的节点时,我必须将当前节点的下一个节点分配给它的前一个节点。这就是我遇到问题的地方
-
你为什么打电话给
previous.setNextNode(null);?
标签: java dictionary linked-list