使最后一个元素插入双端队列。

时间:2018-12-03 18:22:35

标签: java algorithm deque

数据结构化。

在前面插入值的方法:

工作正常。

createUserWithEmailAndPassword

在尾部插入值的方法-由于此行 public void insertLeft(Item item) { if (size == deque.length){ resize(2 * deque.length); } deque[start] = item; start++; size++; }

//end = deque.length - 1;

我该如何解决?

2 个答案:

答案 0 :(得分:2)

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

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

如您所见,您的insertLeft方法是错误的:

  • 它将替换现有值
  • 它会沿错误的方向移动索引
  • 它不处理环绕式

您的insertRight方法错误:

  • 它丢弃了end

重新考虑您在做什么,例如resize()方法可以处理数组包装的情况吗?

示例:

3 4 5 _ _ _ _ _ 1 2
      ^         ^
    end         start

如果您致电insertRight() 5次,您将得到:

3 4 5 X X X X X 1 2
                ^
                start
                end

insertRight()的第六次调用将触发resize(),但是可以正确处理吗?例如。导致:

3 4 5 X X X X X Y _ _ _ _ _ _ _ _ _ 1 2
                  ^                 ^
                  end               start

答案 1 :(得分:0)

deque.length - 1返回最后一个变量的索引。您必须获得过去的成就:

deque[++end] = item;