题解 | #用两个栈实现队列#

用两个栈实现队列

http://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6

思路:

  • 两个栈,一个正序,一个反序
  • 反序的非空可以直接pop()
import java.util.Stack;

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    public void push(int node) {
        //其中一个维持正序,另一个非空时维持反序
        stack1.push(node);
    }

    public int pop() {
        //其中一个维持正序,另一个非空时维持反序
        //s2反序栈,相当于队列头顺序
        if(!stack2.isEmpty()){
            return stack2.pop();
        }
        //s1非空,s2为空,将s1中的反序添加到s2,s2中相当于反序,则为队列
        if(!stack1.isEmpty() && stack2.isEmpty()){
            while(!stack1.isEmpty()){
                int temp = stack1.pop();
                stack2.push(temp);
            }
            return stack2.pop();
        }
        return -1;
    }
}
全部评论

相关推荐

爱喝奶茶的垂耳兔拥抱太阳:感觉项目和实习没有技术亮点和难点,单纯说了自己干了啥
点赞 评论 收藏
分享
Wy_m:只要不是能叫的上名的公司 去实习没有任何意义 不如好好沉淀自己
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务