2015-05-14 68 views
-1

我正在嘗試使用隊列在python中編寫鏈接列表。我的問題是我收到一個錯誤,我無法理解它來自哪裏。我以前編寫過一個堆棧,而且我使用相同的「風格」編碼做了很多。隊列屬性錯誤

爲什麼我得到這個錯誤:

Traceback (most recent call last): 
    File "C:\Users\Nash\Desktop\Python School\queue.py", line 32, in <module> 
    q.put('dim') 
    File "C:\Users\Nash\Desktop\Python School\queue.py", line 19, in put 
    self.last.next = p 

AttributeError: 'NoneType' object has no attribute 'next' 

我是新來編程,所以任何幫助表示讚賞。謝謝:) 這是我的代碼:在__init__然後

<__main__.Node object at 0x028EF770> 
<__main__.Node object at 0x028EF7B0> 
+0

請注意,您應該有**的身份檢查'None' **('是無')not ** equal **('== None')。此外,你正在檢查'self.first',但訪問'self.last'。 – jonrsharpe

+0

'<__main __。0x028EF770>處的​​節點對象不是錯誤,Python只是打印對象的信息,因爲您將它打印爲字符串,而不是嘗試訪問其中的函數。 – SuperBiasedMan

+0

我該怎麼做? – DoubleOseven

回答

0

你初始化self.lastNone

class Node: 
    def __init__(self): 
     self.value = None 
     self.next = None 

class Queue: 

    def __init__(self): 
     self.first=None 
     self.last=None 

    def put(self,x): 
     p = Node() 
     p.value = x 
     if self.first==None: 
      self.first = x 
      self.last = None 
     else: 
      self.last.next = p 
      self.last = p 

    def get(self): 
     if self.first==None: 
      return None 
     x = self.first 
     self.first = self.first.next 
     return x 

q = Queue() 
q.put('hi') 
q.put('bye') 

print(q.get()) 
print(q.get()) 

UPDATE

class Node: 
    def __init__(self): 
     self.value = None 
     self.next = None 

class Queue: 

    def __init__(self): 
     self.first=None 
     self.last=None 

    def put(self,x): 
     p = Node() 
     p.value = x 
     if self.first==None: 
      self.first = p 
      self.last = p 
     else: 
      self.last.next = p 
      self.last = p 
#    self.last.next = None 

    def get(self): 
     if self.first==None: 
      return None 
     x = self.first 
     self.first = self.first.next 
     return x 

q = Queue() 
q.put('hi') 
q.put('bye') 

print(q.get()) 
print(q.get()) 

確定,所以現在我得到這個錯誤試圖做None.next。這就是你得到錯誤的原因。

您需要將數據寫入self.last才能使其正常工作。

+0

這不正確嗎? – DoubleOseven

+0

@Nash,更新它 – ForceBru

+0

你應該在訪問'last'的屬性之前用一些東西替換這個'None'。 'None'對象沒有'next'屬性,因此你得到錯誤。 –

0

Python不知道如何顯示節點對象。所以,你必須添加一個STR()方法確定它應該顯示的方式,像這樣的例子:

class Node: 
    def __init__(self): 
     self.value = None 
     self.next = None 
    def __str__(self): 
     return self.value 
+0

謝謝大家:) – DoubleOseven