题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
栈的基本特点:
- 先入后出,后入先出。
- 除头尾节点之外,每个元素有一个前驱,一个后继。
思路
*题目要求用两个栈来实现,这时候就可以考虑 当push的时候,把记录全部push到stack1中,
*当要pop的时候,我们先把stack1中的所有记录pop出来,然后再push到stack2中,
*这样stack2中最上面的那条记录就是之前最先进入栈的元素,
*然后把它pop出来
*把需要的元素pop出来之后把剩下的数据重新push回到stack1中。
*题目要求用两个栈来实现,这时候就可以考虑 当push的时候,把记录全部push到stack1中,
*当要pop的时候,我们先把stack1中的所有记录pop出来,然后再push到stack2中,
*这样stack2中最上面的那条记录就是之前最先进入栈的元素,
*然后把它pop出来
*把需要的元素pop出来之后把剩下的数据重新push回到stack1中。
public class Demo {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
// 例如 stack1 中push 顺序为1,2,3,4,5 所以此时1号栈中 栈底元素为1 栈顶为5
public void push(int node) {
stack1.push(node);
}
public int pop(){
// 此时 栈1pop出的依次是 5 ,4 ,3 ,2 ,1 而进入栈2的顺序也是5 ,4 ,3 ,2 ,1
// 此时2号栈中 栈底元素为5 栈顶为1
while(!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
//弹出2号栈 栈顶元素
int value = stack2.pop();
//剩下的数据重新push回到stack1中。
while(!stack2.isEmpty()) {
stack1.push(stack2.pop());
}
return value;
}
}