书上给的代码有点问题,得按照他说的逻辑自己写,要注意以下两点:
- stackPop不为空,stackPush不能压入stacjPop栈中
- stackPush压入stacjPop栈中时,要一次性压完所有数据
所以书上的add代码要改,要加一个判断stackPop栈为空的判断。
peek和poll也要改,也是加判断,判断是否满足stackPop栈为空,stackPush不空。
就是这么多,其余直接抄书,以下是代码。
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void pushToPopStack(Stack<Integer> pushStack, Stack<Integer> popStack){
while (!pushStack.empty()){
int tmp = pushStack.pop();
popStack.push(tmp);
}
}
public static void main(String[] args) {
Stack<Integer> stackPush;
Stack<Integer> stackPop;
stackPush = new Stack<>();
stackPop = new Stack<>();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
for(int i=0; i<n; i++) { // 注意 while 处理多个 case
String s = in.next();
if(Objects.equals(s, "add"))
{
int a = in.nextInt();
stackPush.push(a);
if(stackPop.isEmpty()){
pushToPopStack(stackPush, stackPop);
}
}
else if(Objects.equals(s, "poll")) {
if(stackPop.isEmpty() && !stackPush.isEmpty()){
pushToPopStack(stackPush, stackPop);
}
stackPop.pop();
// System.out.println(stackPop.pop());
}
else if(Objects.equals(s, "peek")) {
if(stackPop.isEmpty() && !stackPush.isEmpty()){
pushToPopStack(stackPush, stackPop);
}
System.out.println(stackPop.peek());
}
//pushToPopStack(stackPush, stackPop);
}
}
}

京公网安备 11010502036488号