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

用两个栈实现队列

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;
    }
}
全部评论

相关推荐

牛客769922382号:轮到大佬给公司发感谢信了,想想就爽
点赞 评论 收藏
分享
09-24 12:15
门头沟学院 C++
Brooks178:【DJI 大疆创新】同学您好!感谢您关注大疆创新-"拓疆者"校园招聘并投递后端开发工程师(互联网事业部-深圳)。经过慎重考虑,我们认为目前您可能不是最适合该职位的人选,因此无法为您继续推进该职位的后续安排。我们会将您的信息保留在人才库中,以便未来有合适机会时再与您联系。再次感谢您的信任与参与,祝您求职顺利!
点赞 评论 收藏
分享
09-26 18:23
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务