终于碰到了一道,我稍微思考就会,不用看题库,又思考了的题了,可太难了~
题目
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
数据范围: nle1000n≤1000
要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)
思路
我来讲一讲我的思路
首先要知道栈是先进后出,列表是先进先出
要想当链表,那自然是一个栈当尾,只进(表面看),称为栈1。一个表当头,只出,称为栈2
进的话比较简单,塞进去就好了。
出的怎么办呢?
应该让栈1里面最下面的变成栈2最上面的,也就是将栈1的按序移动到栈2。
但是怎么把握移动的时间节点呢?栈2啥时候不可以弹出?自然是为空啦,所以可以在栈2为空的时候将栈1的移动过去。
但是进入好像没有o(1)?这咋办呢?樂
import java.util.Stack;
public class Solution {
Stack stack1 = new Stack();
Stack stack2 = new Stack();
public void push(int node) {
stack1.add(node);
}
public int pop() {
if(stack2.isEmpty()) {
while(!stack1.isEmpty()) {
stack2.add(stack1.pop());
}
}
return stack2.pop();
}
}



