Nonetype не имеет атрибута "следующий" в связанном списке - PullRequest
2 голосов
/ 18 июня 2020

Я застрял, я не понимаю, в чем проблема в моем коде. вот он:

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

class LinkedList: 
  def __init__(self,head=None):
    self.head = head

  def append(self,data):
    new_Node = Node(data)
    if (self.head):
      cons = self.head
      while(cons):
        cons = cons.next
      cons.next = new_Node  
    else:
      self.head = new_Node
  def printt(self):
    cons = self.head
    while(cons):
      print(cons.data)
      cons = cons.next
Q = LinkedList()
Q.append(3)
Q.append(4)
Q.printt()

, а сообщение об ошибке -

  Traceback (most recent call last):
  File "/tmp/sessions/18c2fb2c9abeb710/main.py", line 26, in <module>
    Q.append(4)
  File "/tmp/sessions/18c2fb2c9abeb710/main.py", line 16, in append
    cons.next = new_Node  
AttributeError: 'NoneType' object has no attribute 'next' 

Я пытался исправить ошибку, но не смог ее решить. Не могли бы вы помочь?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы получаете сообщение об ошибке в строке:

while(cons):

Вы должны остановиться, когда cons.next равно None. В вашем случае код будет работать до тех пор, пока cons не станет None. Затем в следующей строке у вас есть оператор cons.next = new_Node, который по существу проверяет None.next и, следовательно, ошибку.

Поэтому используйте cons.next вместо cons. Следующее будет работать нормально -

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

class LinkedList: 
  def __init__(self,head=None):
    self.head = head

  def append(self,data):
    new_Node = Node(data)
    if (self.head):
      cons = self.head
      while(cons.next):
        cons = cons.next
      cons.next = new_Node  
    else:
      self.head = new_Node
  def printt(self):
    cons = self.head
    while(cons):
      print(cons.data)
      cons = cons.next
Q = LinkedList()
Q.append(3)
Q.append(4)
Q.printt()
1 голос
/ 18 июня 2020

Все, что вам нужно, это изменить строку:

while(cons):

на -

while(cons.next):

, потому что в противном случае cons уже будет None, когда вы покинете l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...