思路:
既然栈是后进先出,那么栈倒转过来不就是先进先出?
我们用设立一个普通栈stack1,当有appendTail操作的时候,就不断在stack1入栈。然后准备一个栈stack2,这个stack2里面保存的顺序和stack1相反,当deleteHead操作时,就不断pop stack2。那么怎么样使stack2里面保存的顺序和stack1相反呢?那就是当deleteHead且stack2为空时,将stack1一个一个出栈并一个一个入栈到stack2。直到stack1为空以后,stack2的栈顶保存的就是stack1的栈底元素,然后再将stack2出栈一个就可以了。
class CQueue {
LinkedList<Integer> stack1;
LinkedList<Integer> stack2;
public CQueue() {
stack1 = new LinkedList<>();
stack2 = new LinkedList<>();
}
public void appendTail(int value) {
stack1.push(value);
}
public int deleteHead() {
if(stack2.isEmpty())
{
while(!stack1.isEmpty())
stack2.push(stack1.pop());
}
if(stack2.isEmpty())
return -1;
return stack2.pop();
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/