这里我们采用作图来说明
例如,有两个队,我们用先用p1来装元素,要入栈,就继续入p1中,如果要出队
就要把p1中的元素除了最后一个全部转到p2中
然后p1.pop,于是有有人会问如果还要输出怎么办,这里有两步
1,首先判断p1是否为空,如果为空,就把p2中的除最后一个转到p1中,然后p2.pop
2.如果p1不为空,那么就把如第一步吧p1中的元素除最后一个元素入队到p2中,然后
p1.pop
例如,就先把p1中的93入队到p2,然后p1.pop
要注意的是,多次转换后难免会乱,我们才采用两个标志q1,q2分别指向
代码如下
public static void enterStack(Queue q1,Queue q2,int val){
Queue p1 = q1;
if(q1.isEmpty()){
p1 = q2;
}
p1.push(val);
}
public static int popStack(Queue q1,Queue q2){
Queue p1 = null;//指向要出队的那个队列
Queue p2 = null;//永远指向出队后元素需要放置的队列
if(q1.isEmpty()&&q2.isEmpty()){//两个队都为空
return -1;
}
if(!q1.isEmpty()){
p1 = q1;
p2 = q2;
}
if(!q2.isEmpty()){
p1 = q2;
p2 = q1;
}
while(p1.usedSize > 1){//将出队的队列依次出队并入到另一队中,直到剩一元素
p2.push(p1.gettop());
p1.pop();
}
int num = -1;
num = p1.gettop();//得到需要出队的元素
p1.pop();//将这个唯一剩下的元素弄出去
return num;
}
新手入门,如有错误,请多多指教。