Java 仅使用助手队列和队列函数反转队列(无堆栈或任何内容)
我不明白。如果我们从以下方面开始: |a | b | c | d| 用这个倒过来,我得到: |b | c | d | a| 它似乎只是颠倒了第一个字母,请有人把它按行分解,这样我就可以看出我在哪里弄糊涂了。谢谢Java 仅使用助手队列和队列函数反转队列(无堆栈或任何内容),java,interface,queue,reverse,Java,Interface,Queue,Reverse,我不明白。如果我们从以下方面开始: |a | b | c | d| 用这个倒过来,我得到: |b | c | d | a| 它似乎只是颠倒了第一个字母,请有人把它按行分解,这样我就可以看出我在哪里弄糊涂了。谢谢 Q是我们要使用助手队列反转的队列 public static void reverseQueue(Queue Q) { Queue q = new Queue(); //helper queue while (!Q.isEmpty()) { for(int i = 1
Q
是我们要使用助手队列反转的队列
public static void reverseQueue(Queue Q)
{
Queue q = new Queue(); //helper queue
while (!Q.isEmpty())
{
for(int i = 1; i <= Q.size()-1; i++) //move last element to the first
Q.enqueue(Q.dequeue());
q.enqueue(Q.dequeue()); //move it to q
}
while(!q.isEmpty())
Q.enqueue(q.dequeue());
}
publicstaticvoidreversequeue(队列Q)
{
队列q=新队列();//帮助器队列
而(!Q.isEmpty())
{
对于(int i=1;i您的方法是okayish,但有一些非常重要的流程:
- 为了遵守超级接口
Queue
作为您的参数,您应该分别使用其实现方法-add
和remove
(给定的队列不是其他实现)
- 不能实例化接口或抽象类!
- 在进行其他操作之前,您不会检查是否有空队列或1个大小的队列
- 如果您不必只使用队列,请寻找更强大的结构作为帮助器
- Java中的参数应该以小写字母开头
- Java总是0索引的最好保持这种状态。
以下是线性时间:
public static void reverseQueue(Queue<Object> q) {
if (q.isEmpty() || q.size() == 1)
return; //nothing happens here
int s = q.size();
Object[] helper = new Object[s];
for (int i = 0; i < s; i++)
helper[s - 1 - i] = q.remove();
for (int i = 0; i < s; i++)
q.add(helper[i]);
}
publicstaticvoidreversequeue(队列q){
if(q.isEmpty()| | q.size()==1)
return;//这里什么也没有发生
int s=q.size();
Object[]helper=新对象[s];
对于(int i=0;i
如果您坚持使用队列-删除您的代码,但不要尝试实例化接口,而是使用一些实现类(例如LinkedList)作为帮助程序。我对这个问题投了否决票,因为没有证据表明对此代码执行了任何调试。请您的问题向我们展示您的调试发现了什么,以及关于特定代码行的特定问题。请参阅:和。