栈的压入、弹出序列

来源:互联网 发布:寻侠九宫突破数据 编辑:程序博客网 时间:2024/06/05 16:43

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

压入栈的所有数字均不相等。例如序列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;    }
0 0
原创粉丝点击