每日一题-Day38-使用两个栈实现队列

题目描述

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

思路

栈的特点为先进后出,队列的特点为先进先出,当我们使用两个栈A和B,元素经过A和B两个栈后,翻转得到先进先出的一个顺序,完成队列,该题目最需要注意的是删除队列头部元素的功能,我们使用两个栈,存在A或者B栈为空的情况,需要按情况分析

class CQueue {

    LinkedList<Integer> A,B;
    public CQueue() {
        A = new LinkedList<>();
        B = new LinkedList<>();
    }
    
    public void appendTail(int value) {
        A.addLast(value);
    }
    
    public int deleteHead() {
        if(!B.isEmpty()) return B.removeLast();
        if(A.isEmpty()) return -1;
        while(!A.isEmpty())
            B.addLast(A.removeLast());
        return B.removeLast();
}}

题目来自力扣

posted @ 2022-01-24 14:28  2月2日  阅读(26)  评论(0)    收藏  举报