剑指offer之用两个栈实现队列(java)——超详细!!!

题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

import java.util.Stack;

public class Solution {
    Stack stack1 = new Stack();
    Stack stack2 = new Stack();
    
    public void push(int node) {
        
    }
    
    public int pop() {
    
    }
}

 思路分析

两个栈实现一个队列

栈是先进后出,队列是先进先出

我们有两个栈,我们可以使数据全部进入栈1,然后全部出栈1。

比如我们进入栈1的顺序是1、2、3、4、5、6

那么出栈1的顺序是6、5、4、3、2、1

我们让数据再次进入到栈2,入栈2顺序是6、5、4、3、2、1

出栈2的顺序就变为了1、2、3、4、5、6,我们就完成了队列操作。

源码

import java.util.Stack;

public class Solution {
    Stack stack1 = new Stack();
    Stack stack2 = new Stack();
    
    public void push(int node){
        stack1.push(node);
    }
    
    public int pop() throws Exception{

        if(stack1.isEmpty()&&stack2.isEmpty()){
            throw new Exception("队列为空");
        }

        //当栈2为空,栈1不为空的时候,才可以向栈2内压入元素。 
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}

 

你可能感兴趣的:(剑指offer)