关于堆栈的面试题

两个栈实现一个队列
思路:入队只需要向s1中压栈即可,出队判断s2是否为空,不为空则pop,为空则将s1出栈然后压入s2,接着再pop即可(对于各种插入删除,自行画图排除即可),这时如果s1也为空则抛异常

两个队列实现一个栈
思路:入栈全部向q1入队,出队则是将q1中数据出队,然后出队的元素插入q2,直到队列q1只剩最后一个元素,直接删除(即栈顶元素),此时变为q2存储数据,q1为空。一直重复

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) 
    {
        stack<int> st;
        int i = 0;
        for (int num : pushed)
        {
            st.push(num);
            while (!st.empty() && st.top() == popped[i])
            {
                st.pop();
                ++i;
            }
        }
        return st.empty();
    }
};
posted @ 2022-09-29 19:40  J1nu  阅读(26)  评论(0)    收藏  举报