劍指offer 面試9題


面試9題:

題目:用兩個棧實現隊列

題目描述:用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素為int類型。

解題思路:有兩個棧stackA,stackB,A為入棧,B為出棧的。入棧時,直接進入A即可,出棧時,先判斷B中是否有元素,如果沒有肯定不能pop(),應將A中所有元素倒壓在B里面,再pop()最上面(后面)的元素,如果有,直接pop()就可以了。兩個棧各自先進后出,在一起又實現了隊列的新進先出。

解題代碼:

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stackA=[]
        self.stackB=[]
    def push(self, node):
        # write code here
        self.stackA.append(node)
    def pop(self):
        # return xx
        if self.stackB:
            return self.stackB.pop()
        elif not self.stackA:
            return None
        else:
            while self.stackA:
                self.stackB.append(self.stackA.pop())
            return self.stackB.pop()

 

題目拓展:用兩個隊列實現一個棧

class Solution:
    def __init__(self):
        self.queueA=[]
        self.queueB=[]

    def push(self,node):
        self.queueA.insert(0,node)
    
    def pop(self):
        if not self.queueA:
            return None

        while len(self.queueA)!=1:
            self.queueB.insert(0,self.queueA.pop())
        self.queueA,self.queueB=self.queueB,self.queueA
        return self.queueB.pop()
#測試
if __name__=='__main__':
    a=Solution()
    a.push(1)
    a.push(7)
    a.push(3)
    a.push(5)
    print(a.pop())
    print(a.pop())
    print(a.pop())
    print(a.pop())
    print(a.pop())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM