面試題09 用兩個棧實現隊列

用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 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]
提示:

1 <= values <= 10000
最多會對 appendTail、deleteHead 進行 10000 次調用

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
 

題解:設立兩個棧,一個從尾部添加元素,一個完成元素的倒序。
第一個直接append添加元素
第二個棧分爲三種情況
1.若stack2存在元素,則直接對stack2進行pop返回棧頂元素
2.若stack1沒有元素,則返回-1
3.若stack1存在元素,則將stack1中的元素出棧之後放入stack2中,然後將stack2的元素彈出即爲隊列的首元素

class CQueue(object):

    def __init__(self):
        self.stack1=[]
        self.stack2=[]

    def appendTail(self, value):
        """
        :type value: int
        :rtype: None
        """
        self.stack1.append(value)

    def deleteHead(self):
        """
        :rtype: int
        """
        if self.stack2:
            return self.stack2.pop()
        if not self.stack1:     #不能用 self.stat1 is None判斷爲空
            return -1
        while self.stack1:
            self.stack2.append(self.stack1.pop())
        return self.stack2.pop()

# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章