题解 | #用两个栈实现队列#
用两个栈实现队列
http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6
数据流动顺序: 入栈->出栈(存入另一个栈)->取栈顶元素存入临时变量(即出队列)->出栈(存入原始栈中,保证队列剩余元素顺序不变)->返回临时变量
先按顺序入栈,再出栈存入到另一个栈中,取出栈顶元素,再将所有元素出栈存入到原始栈中
import java.util.Stack; public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); // 首先,入队列的话就用stack1来接收入队的数据 public void push(int node) { stack1.push(node); } // 所以每次如果要出队列,就必须先把stack1中的所有数据pop出来并存入到stack2中; // 存完之后,此时stack2中的栈顶元素就是要出队的元素了,用一个临时变量存着,作为函数返回值; // 然后,当stack2出栈一个元素之后,就需要再将所有元素再pop并存入到stack1中(保证能按照原始顺序存入到stack1中); // 因为每次出队一个元素,就需要将stack1中的所有元素倒序取出,并把栈底的元素pop出来; // 然后再将剩余元素按照原始顺序入栈,存入到stack1中,保证原始队列的完整性; public int pop() { while (stack1.size() > 0) { stack2.push(stack1.pop()); } // 取出栈底的元素,声明一个临时变量作为函数返回值 int res = stack2.pop(); // 取出元素之后,就需要再将stack2中的元素按照原始顺序存入到stack1中,保证原始队列不变 while (stack2.size() > 0) { stack1.push(stack2.pop()); } return res; } }