面試題 03.04. 化棧為隊
- 一、刷題内容
-
- 原題連結
- 内容描述
- 二、解題方法
-
- 1.方法一
一、刷題内容
原題連結
https://leetcode-cn.com/problems/implement-queue-using-stacks-lcci/
内容描述
實作一個MyQueue類,該類用兩個棧來實作一個隊列。
示例:
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // 傳回 1
queue.pop(); // 傳回 1
queue.empty(); // 傳回 false
說明:
你隻能使用标準的棧操作 – 也就是隻有 push to top, peek/pop from top, size 和 is empty 操作是合法的。
你所使用的語言也許不支援棧。你可以使用 list 或者 deque(雙端隊列)來模拟一個棧,隻要是标準的棧操作即可。
假設所有操作都是有效的 (例如,一個空的隊列不會調用 pop 或者 peek 操作)。
二、解題方法
1.方法一
peek:檢視首個元素,不會移除首個元素,如果隊列是空的就傳回null
class MyQueue:
def __init__(self):
self.pushs = []
self.pops = []
def push(self, x: int) -> None:
self.pushs.append(x)
def pop(self) -> int:
if len(self.pops)==0:
for i in range(len(self.pushs)):
self.pops.append(self.pushs.pop())
return self.pops.pop()
def peek(self) -> int:
if len(self.pops)==0:
for i in range(len(self.pushs)):
self.pops.append(self.pushs.pop())
temp = self.pops.pop()
self.pops.append(temp)
return temp
def empty(self) -> bool:
if len(self.pushs)==0 and len(self.pops)==0:
return True
else:
return False
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()