2017-10-20 118 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的情况下 - 无处可去。

相关问题