剑指Offer05 用两个栈实现一个队列

    科技2025-06-17  8

    剑指Offer05 用两个栈实现一个队列

    题目描述

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

    思路

    对于使用的两个队列,一个用以做插入操作,即push, 另一个用以做删除操作。在没有pop操作时,可以一直向stack1中压栈,而stack1中反序就是队列的顺序,当有pop(出队)操作时,再判断stack2是否为空, 不为空直接出栈,若为空则将stack1中的元素逐个出栈并压入stack2。

    代码

    class Solution { public: void push(int node) { //对于push操作直接在stack1中压栈 stack1.push(node); } int pop() { //对于出栈操作,若stack2非空,直接出栈 if(!stack2.empty()){ int res = stack2.top(); stack2.pop(); return res; }else if(!stack1.empty()){ //若stack2空且stack1还有数据,则stack1逐个元素出栈再压入 //stack2,这样便保证了先进先出 while(!stack1.empty()){ int topvalue = stack1.top(); stack2.push(topvalue); stack1.pop(); } int value = stack2.top(); stack2.pop(); return value; }else{ return -1; } } private: stack<int> stack1; stack<int> stack2; };
    Processed: 0.011, SQL: 8