题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。理解题意就是利用两个先进后出的栈实现一个先进先出的队列
解题思路:
理解题意后是要用两个“先进后出”的栈实现一个“先进先出”的队列,先将元素填进stack1,stack1.push(node),然后stack2为空,但stack1不为空,就将stack1的元素弹出,再压入栈2,这样先进的元素就在栈2顶,这样就实现了先进先出。就是先进后出+后进先出=先进先出。
代码
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| class MyQueue { public: MyQueue() {
}
void push(int x) { s1.push(x); }
int pop() { int res = this->peek(); s2.pop(); return res; }
int peek() { if (s2.empty()) { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } } if (!s2.empty()) return s2.top(); return -1; }
bool empty() { return s1.empty() && s2.empty(); } private: stack<int> s1; stack<int> s2; };
|
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class MyQueue:
def __init__(self): self.s1, self.s2 = [], []
def push(self, x: int) -> None: self.s1.append(x)
def pop(self) -> int: peek = self.peek() self.s2.pop() return peek
def peek(self) -> int: if not self.s2: while self.s1: self.s2.append(self.s1.pop()) if self.s2: return self.s2[-1] return -1
def empty(self) -> bool: return (not self.s1) and (not self.s2)
|
参考