package mine;
import java.util.LinkedList;
import java.util.Stack;
/**
*
* @author 毛二
* @data 2015-8-9
* @comments 栈的压入、弹出序列
* 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
* 假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,
* 序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
*/
public class StackSeq {
public static boolean IsPopOrder(int [] pushA,int [] popA) {
boolean flag = false;
int j=0;
if(((pushA==null )||(popA==null)) ||pushA.length != popA.length || (pushA.length==0 || popA.length==0) )
return flag;
Stack<Integer> s = new Stack<Integer>();
for(int i: popA){
System.out.println("i = "+i);
System.out.println("before pop "+s.size());
if(!s.isEmpty()&& i == s.peek()){
s.pop();
System.out.println("after pop "+s.size());
}
else {
for(;j<pushA.length;j++){
if(i == pushA[j]){
// System.out.print(" last push: "+pushA[j]+"\n");
// ! s.push(pushA[j]);
j++;
System.out.println();
break;
}else {
System.out.print(" push: "+pushA[j]);
s.push(pushA[j]);
}
}
}
}
if(s.isEmpty())
flag= true;
System.out.println(flag+" "+s.size());
return flag;
}
public static void main(String[] args) {
int[] push = null;//{1,2,3,4,5};
int[] pop = null;//{4,5,3,2,1};
// {1,2,3,1,5};
// {4,3,5,1,2};
System.out.println(IsPopOrder(push,pop));
}
}
剑指offer刷题之java实现的栈的压入、弹出序列
最新推荐文章于 2021-08-25 16:14:29 发布