题目:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
示例 2
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]

提示:

  • 1 <= values <= 10000
  • 最多会对  appendTail、deleteHead<span> </span>进行  10000 次调用

题解思路

将一个栈当作输入栈,用于压入传入的数据
另一个栈当作输出栈,用于出队操作
队列头部删除操作中,若输出栈的数据为空则将输入栈的全部数据依次弹出并压入输出栈,则输出栈的元素出栈顺序就和队列出队顺序一致

import java.util.LinkedList;

public class CQueue
{
    LinkedList<Integer> in;
    LinkedList<Integer> out;

    public CQueue() {
         in = new LinkedList<>();
         out = new LinkedList<>();
    }

    public void appendTail(int value)
    {
        in.push(value);
    }
    public int deleteHead()
    {   
        if(out.isEmpty())
        {   
            if(in.isEmpty())
            {
                return -1;     
            } 
            inout();
         }
        return out.pop();
    }
    public void inout()
    {
        while(!in.isEmpty())
        out.push(in.pop());
    }
}