面试题9(1):用两个栈实现队列

题目

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

解题思路

  1. 题目的目的是让我们用两个“先进后出”的栈stack1和stack2实现一个“先进先出”的队列。
  2. 首先把元素插入stack1,让stack2为空,这样最开始进去的元素在栈底。
  3. 当我们试图删除元素时,把stack1中的元素逐个弹出并压入stack2中,让stack1为空。这样stack1和stack2的顺序正好相反,stack2弹出元素时就达到先进先出的目的了。
  4. 总结,当我们删除一个元素时,首先查看stack2是否为空,若不为空,直接从stack2中弹出元素;若stack2为空,先从stack1把元素逐个弹出并压入stack2,然后再从stack2中弹出元素即可。

代码

class Solution{
    public:
        void push(int node)
        {
            stack1.push(node);
        }

        int pop()
        {
            int data;
            //若栈2不为空
            if(!stack2.empty())
            {
                data = stack2.top();
                stack2.pop();
            }
            else
            {
                while(!stack1.empty())
                {
                    data = stack1.top();
                    stack1.pop();
                    stack2.push(data);
                }
                data = stack2.top();
                stack2.pop();
            }
            return data;
        }
    private:
        stack stack1;
        stack stack2;

};

完整代码见Github

你可能感兴趣的:(面试题9(1):用两个栈实现队列)