题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例1
输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
实例2
输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
题目解析
解析:刚开始开到题目很懵逼。不知道要干嘛,嫖嫖评论区才明白
["CQueue","appendTail","deleteHead","deleteHead"]
第一个CQueue 创建队列 参数为null 没有返回值
第二个appendTail 往队列中插入整数 参数为3 没有返回值
第三个deleteHead 将栈底的元素删除该元素的数值,所以返回 3
第四个deleteHead 继续删除栈底的元素,但是没有元素所以返回-1对应的:第二个参数列表
[[],[],[5],[2],[],[]]
所有输出显而易见了
[null,null,3,-1]
Python实现
class CQueue(object):
def __init__(self):
self.S1 = []
self.S2 = []
def appendTail(self, value):
"""
汉诺塔形式存储
:type value: int
:rtype: None
"""
#第一步先将1中的值移到->2
while self.S1:
self.S2.append(self.S1.pop())
#S1append值
self.S1.append(value)
#2->1
while len(self.S2) > 0 :
self.S1.append(self.S2.pop())
return self.S1
def deleteHead(self):
"""
:rtype: int
"""
if(len(self.S1) <= 0):
return -1
else:
return self.S1.pop()
C++是实现
//引用STL中stack容器
class CQueue {
public:
stack<int>s1;
stack<int>s2;
CQueue() {}; //构造函数
void appendTail(int value)
{
while(s1.size()>0)
{
s2.push(s1.top());
s1.pop();
}
//将value加入的到s1
s1.push(value);
//将s2中的数据加入到p1
while(s2.size()>0)
{
s1.push(s2.top());
s2.pop();
}
}
int deleteHead() {
if(s1.size()>0)
{
int a ;
a = s1.top();
s1.pop();
return a ;
}
else
{
return -1;
}
}
};