基本上我得到了一个 CircularQueue 的实现,我需要实现一个名为“public boolean contains (E other)”的方法,如果我的队列中存在参数“other”,该方法应该返回 true。
我对它没意见,因为它是一个数组,但后来我看到它的另一个条件让我很烦。
请记住,您无法在队列中的所有元素之间自由导航。只有前面的元素是可访问的 随时通过 peek 方法。 contains 和 intersectWith 方法的实现必须 不要使用任何额外的队列来临时保存此队列的某些元素。
迭代器是否适用于解决这个问题?
非常感谢任何帮助。
米亚尔
解决方法:
我想出的答案, 方法旋转说明: 方法 rotate( int n ) 从队列的前面移除 n 个元素并将它们添加到队列的后面 队列。元素添加到队列尾部的顺序与它们从队列前部移除的顺序相同 的队列。例如,给定一个包含元素\A, B, C, D, E"的队列 q,其中元素 A 是 在队列的前面,在方法调用 q.rotate( 2 ) 之后,队列的内容将是\C, D, E, A、B”;
public boolean contains(E elem) {
while( this.isEmpty() != true){
if(this.peek() == elem){return true;}
else{rotate(1);}
}
return false;
}
最佳答案
对于这种情况,迭代器不实用。
因为它是一个循环队列,你可以记住你看到的第一件事(不一定要把它从循环队列中完全删除),然后出队/入队直到你找到你要找的东西,或者到达第一个出队节点。
关于java - 不使用临时队列遍历循环队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10058949/