题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。
栈是先进后出的,队列是先进先出的。
思路:
- 开始 两个栈都为空
- 第1个数据来 ,压入到 firstStack
- 第2个数据来,压入到 firstStack
- 第3个数据来,压入到 firstStack
- 取数据,firstStack 把栈中所有的元素 压入secondStack ,然后从secondStack中pop出第一个数据。
- 第4个数据来,压入到哪里呢?把secondStack所有元素压入firstStack。firstStack再压入新的数据。
代码实现
class CQueue {
Stack<Integer> firstStack = new Stack<>();
Stack<Integer> secondStack = new Stack<>();
public CQueue() {
}
public void appendTail(int value) {
while (!secondStack.isEmpty()) {
firstStack.push(secondStack.pop());
}
firstStack.push(value);
}
public int deleteHead() {
while (!firstStack.isEmpty()) {
secondStack.push(firstStack.pop());
}
if (secondStack.isEmpty()) {
return -1;
}
return secondStack.pop();
}
}
参考链接:
网友评论