题解 | #由两个栈组成的队列#

由两个栈组成的队列

http://www.nowcoder.com/practice/6bc058b32ee54a5fa18c62f29bae9863

书上给的代码有点问题,得按照他说的逻辑自己写,要注意以下两点:
  • 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);
        }
    }
}


全部评论

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务