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

用两个栈实现队列

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

数据流动顺序: 入栈->出栈(存入另一个栈)->取栈顶元素存入临时变量(即出队列)->出栈(存入原始栈中,保证队列剩余元素顺序不变)->返回临时变量

先按顺序入栈,再出栈存入到另一个栈中,取出栈顶元素,再将所有元素出栈存入到原始栈中

import java.util.Stack;
public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();

    // 首先,入队列的话就用stack1来接收入队的数据
    public void push(int node) {
        stack1.push(node);


    }
    // 所以每次如果要出队列,就必须先把stack1中的所有数据pop出来并存入到stack2中;
    // 存完之后,此时stack2中的栈顶元素就是要出队的元素了,用一个临时变量存着,作为函数返回值;
    // 然后,当stack2出栈一个元素之后,就需要再将所有元素再pop并存入到stack1中(保证能按照原始顺序存入到stack1中);
    // 因为每次出队一个元素,就需要将stack1中的所有元素倒序取出,并把栈底的元素pop出来;
    // 然后再将剩余元素按照原始顺序入栈,存入到stack1中,保证原始队列的完整性;
    public int pop() {
        while (stack1.size() > 0) {
            stack2.push(stack1.pop());
        }
        // 取出栈底的元素,声明一个临时变量作为函数返回值
        int res = stack2.pop();
        // 取出元素之后,就需要再将stack2中的元素按照原始顺序存入到stack1中,保证原始队列不变
        while (stack2.size() > 0) {
            stack1.push(stack2.pop());
        }
        return res;
    }
}
全部评论

相关推荐

榕城小榕树:你别说,你还真别说,计算机实习薪资跟这个差不多
点赞 评论 收藏
分享
08-03 00:07
山西大学 Java
汪汪offer收割侠:5k没问题的
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务