题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 若队列中没有元素,返回-1
解题思路:
栈的性质是先进后出,队列的性质是先进先出,队列的push操作,可以使用一个栈来完成,队列的pop操作,需要把一个栈的数据转到另外一个栈上,然后只需要对另外一个栈,执行pop()操作即可,因为此时的栈顶即是第一个栈的栈低,看成队列的话,即是队列的出口处。
代码1:
class Solution
{
public:
void push(int node)
{
stack1.push(node);
}
int pop()
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
int num=stack2.top();
stack2.pop();
while(!stack2.empty())
{
stack1.push(stack2.top());
stack2.pop();
}
return num;
}
private:
stack<int> stack1;
stack<int> stack2;
};
代码2:
class Solution:
def __init__(self):
self.stack1 = []
self.stack2 = []
def push(self, node):
self.stack1.append(node)
def pop(self):
# 检查stack2是否为空,不为空弹出,
# 为空继续判断stack1是否为空,不为空放入stack2中,为空表示栈内无元素
try:
_pop = self.stack2.pop()
except IndexError as e:
if len(self.stack1) != 0:
for i in range(len(self.stack1)):
self.stack2.append(self.stack1.pop())
_pop = self.stack2.pop()
else:
_pop = -1
return _pop
if __name__ == '__main__':
s = Solution()
s.push(1)
s.push(2)
s.push(3)
s.push(4)
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
s.push(5)
print(s.pop())
print(s.pop())
代码3:
class CQueue:
def __init__(self):
self.A, self.B = [], []
def appendTail(self, value):
self.A.append(value)
def deleteHead(self):
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()
题目来源:
参考链接:
https://blog.csdn.net/weixin_42788078/article/details/88565550