仅使用帮助程序队列和队列函数反转队列(没有堆栈或任何东西)

时间:2017-12-18 21:34:17

标签: 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; 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());
}

1 个答案:

答案 0 :(得分:0)

你的方法 okayish ,但是,有一些非常重要的流程:

  • 要符合超级接口Queue作为参数,您应该分别使用其实现的方法 - addremove(给定Queue不是其他实现)。
  • 您无法实例化Interface或抽象类!
  • 在其他任何事情之前,您不会检查空的或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]);
    }

如果您坚持使用队列 - 请删除您的代码,但不要尝试实例化接口,而是使用一些实现类,例如: LinkedList作为帮助者。