如何使用堆栈反转双端队列?

How to reverse a Deque using stack?

这是我的代码:-

stack <int> intStack;

    while (!adaqueue.empty())
    {
        intStack.push(adaqueue.front());
        adaqueue.pop_front();
    }
    while (!intStack.empty())
    {
        adaqueue.push_front(intStack.top());
        intStack.pop();
    }

它没有给出正确的输出。例如,12 和 45 分别是双端队列中的项目。如果我使用上面的代码来反转双端队列,它会给出错误的输出。如果我尝试打印前面的项目,它会给我 12 而不是 45。我的代码可能有什么潜在错误? N.B。 c++语言代码。

你想在这里做的是在第二个while循环中你想从堆栈中删除顶部,然后将它添加到队列的后面。这样你就可以颠倒顺序。试着在纸上画出草图。这将有助于形象化。

队列初始状态(1为最前面):

{1,2,3,4,5}

入栈后(5为栈顶):

{5,4,3,2,1}

然后从栈顶取出并添加到队列的后面,我们保留相同的顺序(5):

S {5,4,3,2,1}
Q {}

S {4,3,2,1}
Q {5}

S {3,2,1}
Q {5,4}

S {2,1}
Q {5,4,3}

等等。最后我们把队列倒过来了:

S {}
Q {5,4,3,2,1}