剑指offer——面试题22:栈的压入和弹出序列

来源:互联网 发布:mysql服务安装失败 编辑:程序博客网 时间:2024/05/22 06:27

bool IsPopOrder(const int* pPush, const int* pPop, int nLength){    bool bPossible = false;    if(pPush != NULL && pPop != NULL && nLength > 0)    {        const int* pNextPush = pPush;        const int* pNextPop = pPop;        std::stack<int> stackData;        while(pNextPop - pPop < nLength)        {            // 当辅助栈的栈顶元素不是要弹出的元素            // 先压入一些数字入栈            while(stackData.empty() || stackData.top() != *pNextPop)            {                // 如果所有数字都压入辅助栈了,退出循环                if(pNextPush - pPush == nLength)                    break;                stackData.push(*pNextPush);                pNextPush ++;            }            if(stackData.top() != *pNextPop)                break;            stackData.pop();            pNextPop ++;        }        if(stackData.empty() && pNextPop - pPop == nLength)            bPossible = true;    }    return bPossible;}



0 0
原创粉丝点击