数据结构。
在前面插入值的方法:
好好工作。
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