题解 | #用两个栈实现队列#
用两个栈实现队列
https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
class Solution { public: void push(int node) { stack1.push(node); } int pop() { while(!stack1.empty()){ stack2.push(stack1.top()); stack1.pop(); } int res=stack2.top(); stack2.pop(); while(!stack2.empty()){ stack1.push(stack2.top()); stack2.pop(); } return res; } private: stack<int> stack1; stack<int> stack2; };
队列 先进先出, 栈 先进后出。 入栈操作需要保留这个元素,以及按固定顺序。 出队要找到队头元素,也就是第一个进去的元素。如果用栈来实现。第一个进去的必然压在栈底。需要用另一个栈来存当前栈的元素,倒转一下。这样新栈栈顶就是第一个元素。此时把栈顶元素出栈,再把剩下的出栈再入第一个栈。 这样出队就完成了。进队操作需要按顺序,进队列与进栈的顺序是不变的。