<剑指offer> 第5题

题目:

用两个栈实现一个队列。队列声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。

思路:

栈1用于存储元素,栈2用于弹出元素,负负得正

代码实现:

import java.util.Stack;

public class MyQueue {

    //push后pop给output
    private Stack<Integer> input;
    //push input的元素后pop出栈显示元素
    private Stack<Integer> output;

    private MyQueue(){
        input = new Stack<>();
        output = new Stack<>();
    }

    //只要output栈为空,input栈不为空,就把input中所有的元素都压入output
    private void transfer(){
        if(output.isEmpty()){
            while(!input.isEmpty()){
                output.push(input.pop());
            }
        }
    }

    //队列尾加一个元素
    public void add(int i){
        input.push(i);
        transfer();
    }

    //删除队首元素
    public int remove(){
        if(input.isEmpty() && output.isEmpty()){
            throw new RuntimeException("queue is Empty");
        }
        transfer();
        return output.pop();
    }

    public int peek(){
        if(input.isEmpty() && output.isEmpty()){
            throw new RuntimeException("queue is Empty");
        }
        transfer();
        return output.peek();
    }

    public boolean isEmpty(){
        return input.isEmpty() && output.isEmpty();
    }




}

猜你喜欢

转载自www.cnblogs.com/HarSong13/p/11324620.html
今日推荐