【发布时间】:2017-05-28 10:02:17
【问题描述】:
我创建了一个双向循环链表。
我需要知道每个节点到头的距离。
因为当我必须删除或获取具有特定键的节点时,如果两个节点具有相同的键和相同的距离,则必须删除或获取,否则必须删除离头最近的节点。
我不知道如何计算距离,因为是圆形的......
这个链表的插入就是这样工作的。
所有节点都在头部之后。
例子:
1) 头部
2) Head-A(插入 A)
3) Head-B-A(插入 B)
4) Head-C-B-A(插入 C)
目前,我只进行了没有距离的正常取消。 这是我的代码。
/* Function to delete node with the key */
public void deleteWithKey(int key) {
if (key == head.getData()) {
if (size == 1) {
head = null;
end = null;
size = 0;
return;
}
head = head.getLinkNext();
head.setLinkPrev(end);
end.setLinkNext(head);
size--;
return;
}
if (key == end.getData()) {
end = end.getLinkPrev();
end.setLinkNext(head);
head.setLinkPrev(end);
size--;
}
Node current = head.getLinkNext();
for (int i = 2; i < size; i++) {
if (key == current.getData()) {
Node p = current.getLinkPrev();
Node n = current.getLinkNext();
p.setLinkNext(n);
n.setLinkPrev(p);
size--;
return;
}
current = current.getLinkNext();
}
System.out.println("Don't exist a node with this key");
}
谢谢大家。
【问题讨论】:
-
为什么计算距离有问题?
-
因为是循环的。每个节点都链接到左右。我需要知道头部到每个节点的距离。
-
示例:我有一个列表 Head-B-A , B 和 A 的距离相同。因为 A 链接到 Head。将是 AHeadBA
-
其他示例:Head-D-C-B-A 。 C 和 B 具有相同的距离,因为 Head-D-C(距离 2)。 B-A-Head(距离 2)
-
我认为你错过了“head”和“A”之间的“end”节点
标签: java list distance doubly-linked-list circular-list