題目:
正如標(biāo)題所述,你需要使用兩個棧來實現(xiàn)隊列的一些操作永品。
隊列應(yīng)支持push(element)脱篙,pop() 和 top(),其中pop是彈出隊列中的第一個(最前面的)元素
pop和top方法都應(yīng)該返回第一個元素的值除破。
樣例:
比如push(1), pop(), push(2), push(3), top(), pop(),你應(yīng)該返回1琼腔,2和2
挑戰(zhàn):
僅使用兩個棧來實現(xiàn)它互拾,不使用任何其他數(shù)據(jù)結(jié)構(gòu)斯嚎,push煤蹭,pop 和 top的復(fù)雜度
都應(yīng)該是均攤O(1)的
思路:
把棧2中的元素導(dǎo)入到棧1中就從先進(jìn)后出隊列變成了先進(jìn)先出隊列
代碼:
public class MyQueue {
private Stack<Integer> stack1;
private Stack<Integer> stack2;
public MyQueue() {
// do initialization if necessary
stack1 = new Stack<Integer>();
stack2 = new Stack<Integer>();
}
private void stack2ToStack1(){
while(!stack2.isEmpty()){
stack1.push(stack2.pop());
}
}
public void push(int element) {
// write your code here
stack2.push(element);
}
public int pop() {
// 棧1為空把棧2元素加入棧1朗涩,棧1不為空直接從棧1拋出元素
if(stack1.empty() == true){
this.stack2ToStack1();
}
return stack1.pop();
}
public int top() {
if(stack1.empty() == true){
this.stack2ToStack1();
}
return stack1.peek();
}
}
代碼可以優(yōu)化:
http://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html