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

由两个栈组成的队列

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);
        }
    }
}


全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
04-08 20:03
已编辑
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务