用两个栈实现队列(Python and C++解法)
2021-05-03 13:28
标签:lse problem 函数 来源 整数 etc 完成 入栈 特殊 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: 输入: 来源:力扣(LeetCode) stack1只负责入栈元素即可。 在删除stack2中的元素时,需要考虑特殊情况:如果stack2非空,直接出栈栈顶元素;如果stack2为空,且stack1为空,返回-1,如果satck1非空,需要将stack1中的元素全部压入stack2,将stack1中的元素倒序排列。 用两个栈实现队列(Python and C++解法) 标签:lse problem 函数 来源 整数 etc 完成 入栈 特殊 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13198508.html题目:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]
示例 2:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof思路:
Python解法:
1 class CQueue:
2 def __init__(self):
3 self.stack1 = []
4 self.stack2 = []
5
6 def appendTail(self, value: int) -> None:
7 self.stack1.append(value)
8 return []
9
10 def deleteHead(self) -> int:
11 if not self.stack2: # 如果stack2是空的,不能用self.stack2 is []进行判断!!!!!!!!!!!!
12 if not self.stack1: # 如果stack1是空的
13 return -1
14 else:
15 while self.stack1: # 如果stack1不是空的,把它的元素全部压入stack2
16 self.stack2.append(self.stack1.pop())
17 return self.stack2.pop()
18 else:
19 return self.stack2.pop()
C++解法:
1 class CQueue {
2 public:
3 stackint> stack1;
4 stackint> stack2;
5 CQueue() {
6
7 }
8
9 void appendTail(int value) {
10 stack1.push(value);
11 }
12
13 int deleteHead() {
14 if(stack2.empty()) {
15 if(stack1.empty())
16 return -1;
17 else {
18 while(!stack1.empty()) {
19 int temp = stack1.top();
20 stack2.push(temp);
21 stack1.pop(); // C++的pop只能删除元素,没有返回值
22 }
23 }
24 }
25 int tempRes = stack2.top();
26 stack2.pop();
27 return tempRes;
28 }
29 };
上一篇:基数排序(Java)
下一篇:JavaScript对象