用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
初始代码:
import java.util.Stack;
public class Solution {
Stack stack1 = new Stack();
Stack stack2 = new Stack();
public void push(int node) {
}
public int pop() {
}
}
问题分析:这就要了解什么是栈?什么是队列?据我所知,栈的特点是后进先出,先进后出,而队列的特点是先进先出,而出题人的目的却是两个栈来实现一个队列?我的初步思想是先把数都放在栈1中,然后再慢慢把所有的数都放进栈二,事实证明我还是太嫩了,因为这样的话,当你中途pop,然后再push的时候,根本就实现不了队列的形式。
我的想法并没有错,错就错在欠缺考虑栈2是否为空的判断,只要考虑了这个问题就迎刃而解了,编程就是这样,考虑要周全。
我的代码:public class Text {
Stack stack1 = new Stack();
Stack stack2 = new Stack();
public static void main(String[] args){
Text t=new Text();
t.push(6);
t.push(7);
t.push(8);
t.push(9);
t.push(10);
}
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack2.isEmpty())
{ //System.out.println(stack1.size());
for(int i=-2;i
{
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
分析:我的代码虽然可以通过但是i=-2实在让人匪夷所思!!!
直接把for循环替换成while比较好。
代码如下:public class Text {
Stack stack1 = new Stack();
Stack stack2 = new Stack();
public static void main(String[] args){
Text t=new Text();
t.push(6);
t.push(7);
t.push(8);
t.push(9);
t.push(10);
}
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack2.isEmpty())
{ //System.out.println(stack1.size());
while(!stack1.isEmpty())
stack2.push(stack1.pop());
}
return stack2.pop();
}
}
领取专属 10元无门槛券
私享最新 技术干货