改变双端队列元素

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 实现为双向链表。支持 editLefteditRight 的最简单方法是沿着链接前进,直到到达您希望更改的节点。

类似于:

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