【问题标题】:Reversing queue only using helper queue and queue functions (no stack or anything)仅使用辅助队列和队列函数来反转队列(没有堆栈或任何东西)
【发布时间】:2017-12-18 21:34:17
【问题描述】:

我不明白这一点。如果我们开始:

|一个 |乙 | c | d |

用这个反转它,我得到:

|乙 | c | d |一个 |

它似乎只是颠倒了第一个字母,有人可以按行分解它,所以我可以看到我在哪里感到困惑。谢谢!

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

【问题讨论】:

标签: java interface queue reverse


【解决方案1】:

你的方法是okayish,但是,有一些相当大的流程:

  • 要遵守超级接口Queue 作为参数,您应该分别使用其实现的方法-addremove(假设队列不是其他实现)。
  • 您不能实例化接口或抽象类!
  • 您不会先检查空队列或大小为 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 作为助手。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    相关资源
    最近更新 更多