改变双端队列元素
Changing Deque elements
我用以下方法制作了自己的 Deque class:
Deque#pushLeft(E e), pushRight(E e), popLeft() and popRight().
是否可以创建一个可以更改 Deque 的任何元素的方法?我想从左和右编辑它们。所以 editRight(index, E newElement)
和 editLeft
一样。
我将如何开始做这件事?我需要使用迭代器吗?
Deque是ADT,可以用链表或者数组作为数据结构来实现。您的答案取决于用于存储 elements.and 的数据结构类型,我还建议您实施一个 peek 操作,它会为您提供一个元素的参考以供编辑建议。peek 操作可以被其他高级用户使用级操作,如 delete/contains 等
您已将 Deque
实现为双向链表。支持 editLeft
和 editRight
的最简单方法是沿着链接前进,直到到达您希望更改的节点。
类似于:
public void editLeft(int index, Item item) {
Node node = right;
while (node != null && index > 0) {
node = node.prev;
index--;
}
if (node != null) {
node.item = item;
} else {
throw new IllegalRangeException("Attempt to edit value with illegal index");
}
}
我用以下方法制作了自己的 Deque class:
Deque#pushLeft(E e), pushRight(E e), popLeft() and popRight().
是否可以创建一个可以更改 Deque 的任何元素的方法?我想从左和右编辑它们。所以 editRight(index, E newElement)
和 editLeft
一样。
我将如何开始做这件事?我需要使用迭代器吗?
Deque是ADT,可以用链表或者数组作为数据结构来实现。您的答案取决于用于存储 elements.and 的数据结构类型,我还建议您实施一个 peek 操作,它会为您提供一个元素的参考以供编辑建议。peek 操作可以被其他高级用户使用级操作,如 delete/contains 等
您已将 Deque
实现为双向链表。支持 editLeft
和 editRight
的最简单方法是沿着链接前进,直到到达您希望更改的节点。
类似于:
public void editLeft(int index, Item item) {
Node node = right;
while (node != null && index > 0) {
node = node.prev;
index--;
}
if (node != null) {
node.item = item;
} else {
throw new IllegalRangeException("Attempt to edit value with illegal index");
}
}