栈的压入、弹出序列
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设
压入栈的所有数字均不相等。例如序列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;
}