数据结构。
在前面插入值的方法:
好好工作。

 public void insertLeft(Item item) {
       if (size == deque.length){
          resize(2 * deque.length);
      }
      deque[start] = item;
      start++;
      size++;
}

方法在tail中插入值-由于此行而覆盖最后一个元素//end = deque.length - 1;
public void insertRight(Item item) {
    if (size == deque.length){
        resize(2 * deque.length);
    }
    end = deque.length - 1;
    deque[end++] = item;
    end %= deque.length;
    size++;
}

我怎样才能修好它?

最佳答案

假设数组大小为10,当前有3个值:

_ _ _ 1 2 3 _ _ _ _
      ^     ^
  start     end

如您所见,您的insertLeft方法是错误的:
它将取代现有的价值。
它将索引移动到错误的方向
它不能处理包裹
你的方法是错误的:
它丢弃了insertRight
重新考虑您正在做的事情,例如end方法是否处理数组已包装的条件?
例子:
3 4 5 _ _ _ _ _ 1 2
      ^         ^
    end         start

如果您呼叫resize()5次,您将得到:
3 4 5 X X X X X 1 2
                ^
                start
                end

第六次调用insertRight()会触发insertRight(),但它会正确处理吗例如,导致:
3 4 5 X X X X X Y _ _ _ _ _ _ _ _ _ 1 2
                  ^                 ^
                  end               start

09-13 01:15