学习目标:
用两个栈实现队列
题目描述:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
我的答案:
Java代码class CQueue {
Stack<Integer> A,B;
public CQueue() {
A = new Stack<Integer>();
B = new Stack<Integer>();
}
public void appendTail(int value) {
A.push(value);
}
public int deleteHead() {
if(!B.isEmpty()){
return B.pop();
}
else{
if(A.isEmpty()){
return -1;
}
else{
while(!A.isEmpty()){
B.push(A.pop());
}
return B.pop();
}
}
}
}
/**
* Your CQueue object will be instantiated and called as such:
* CQueue obj = new CQueue();
* obj.appendTail(value);
* int param_2 = obj.deleteHead();
*/
Python代码
class CQueue:
def __init__(self):
self.A,self.B = [],[]
def appendTail(self, value: int) -> None:
self.A.append(value)
def deleteHead(self) -> int:
if self.B:return self.B.pop()
if not self.A:return -1
while self.A:
self.B.append(self.A.pop())
return self.B.pop()
# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()
JS代码
var CQueue = function() {
this.A=[];
this.B=[];
};
/**
* @param {number} value
* @return {void}
*/
CQueue.prototype.appendTail = function(value) {
this.A.push(value);
};
/**
* @return {number}
*/
CQueue.prototype.deleteHead = function() {
if(this.B.length!=0){
return this.B.pop();
}
else{
if(this.A.length==0){
return -1;
}
else{
while(this.A.length!=0){
this.B.push(this.A.pop());
}
return this.B.pop();
}
}
};
/**
* Your CQueue object will be instantiated and called as such:
* var obj = new CQueue()
* obj.appendTail(value)
* var param_2 = obj.deleteHead()
*/
解题笔记:
关于Java:
//定义栈的结构 Stack<Integer> stack = new Stack<>();
Stack<Integer> A,B必须全局声明,放在public结构体里会报错
关于Python:
变量的第一个字母必须大写,否则报错
直接使用self.A,self.B=[],[]声明两个数组模拟栈,在末尾加入元素用append(),删除末尾元素用pop(),获得栈的第一个元素用self.A[-1]
if not self.A的意思要琢磨
关于JS:
使用this.A=[]声明数组,模拟栈,后续使用pop(),push()操作
判断是否为空时,不能直接用!this.A.length,必须用this.A.length==0。注意.length()不是一个函数,获得数组的长度要用.length,后面不要加括号