判断合法的出栈队列
java代码如下
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class IsStackSeq {
public static boolean isStackSeq(Queue<Integer> queue){
Stack<Integer> stack =new Stack<Integer>();
int size=queue.size();
for(int i=1;i<=size;i++){
stack.push(i);
while(!stack.isEmpty()&&queue.peek()==stack.peek()){
queue.poll();
stack.pop();
}
}
if (!stack.isEmpty()) {
return false;
}
return true;
}
public static void main(String[] args) {
Queue<Integer> queue=new LinkedList<Integer>();
queue.add(3);
queue.add(2);
queue.add(5);
queue.add(4);
queue.add(1);
System.out.println(isStackSeq(queue));
}
}
如果
for(int i=1;i<=size;i++)
改成
for(int i=1;i<=queue.size();i++)
结果不对,因为for循环里面改变了queue的大小,导致下一次判断i的范围时会重新计算queue.size()