2017-10-20 64 views
0

我想寫一個下一個方法能夠迭代一個鏈表對象一個for循環,無論我如何更改我的代碼,我總是收到「'NoneType'對象不可調用」。這是一項任務,因此當涉及到其他構造函數和方法時,我無法改變任何東西。唯一可以玩的就是它和下一個。這是我的代碼:試圖寫一個next()方法來迭代一個鏈表並獲得一個「'NoneType'對象不可調用」錯誤

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



class LinkedList: 
    def __init__(self, fdata): 
     firstNode = Node(fdata) 
     self.first = firstNode 
     self.last = firstNode 
     self.n = 1 

    def append(self, ndata): 
     newNode = Node(ndata) 
     self.last.next = newNode 
     self.last = newNode 
     self.next = None 
     self.n += 1 

    def __iter__(self): 
     return self 

    def next(self): 
     if self.__current.next == None: 
      raise StopIteration 
     else:   
      self.__current = self.__current.next 
      return self.__current.next.ndata 


a = LinkedList(0); a.append(1); a.append(2) 

for n in a: 
    print n 
+0

請注意,你的鏈表不應該是迭代器,你應該實現另一個迭代器類,即只在LinkedList中實現'__iter__',它應該返回一個'LinkedListIterator'對象,它實現'__iter__'和' next'。但無論如何,什麼是「自我.__當前」?您從不初始化任何地方 –

+0

更重要的是,如果您遇到錯誤,請發佈完整的錯誤消息,包括調用代碼和完整的堆棧跟蹤 –

回答

0

看起來像你提前閱讀太多。試試:

self.__current = self.__current.next 
return self.__current.data 

因爲self.__current.next在那時會指向下一個下一個元素。並在列表dnid的情況下 - 無處可去。

相關問題