栈的压入、弹出序列

题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设

压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹

出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

思路:建立一个辅助栈,依次将压入序列压入栈内,并且判断当前栈顶元素是否等于弹出序列的元素,如果等于

则将元素弹出,并将弹出序列的指针指向下一个。如果已经将压入序列的元素全部都压入栈内,判断当前栈是否

为空,如果为空返回true,如果不为空则返回false。

public static boolean IsPopOrder(int [] pushA,int [] popA) {
        boolean result=false;
        if(pushA.length!=popA.length){
            return false;
        }else if(pushA.length==0){
            return false;
        }
        Stack<Integer> stack=new Stack<Integer>();
        int push=0,pop=0;
        while(true){
            stack.push(pushA[push]);
            push++;
            while(!stack.isEmpty()&&stack.peek()==popA[pop]){
                stack.pop();
                pop++;
            }


            if(push>=pushA.length){
                if(stack.isEmpty()){
                    result=true;
                }
                break;
            }
        }
        return result;
    }
posted @ 2016-05-02 13:49  黄大仙爱编程  阅读(89)  评论(0编辑  收藏  举报