Почему это когда l oop заканчивается? node5 не является NoneType. (Обход связанных списков) - PullRequest
1 голос
/ 23 января 2020

Код ниже. Я концептуально понимаю, что l oop заканчивается, потому что self.next конечного узла = None, но мы проверяем, чтобы node != None и type(node5) вернули __main__.LinkedListNode, что не None , Так как же node != None когда-либо возвращает False, заканчивая время l oop?

class LinkedListNode():

    def __init__(self,value):
        self.value = value
        self.next = None #This is the next point, is initially None

    def traverseList(self):
        node = self #Start at the Head Node
        while node != None:
            print(node.value) #Access the node value
            node = node.next #Move to the next link in the list

#Create nodes for list
node1 = LinkedListNode('Mon')
node2 = LinkedListNode('Tues')
node3 = LinkedListNode('Wed')
node4 = LinkedListNode('Thurs')
node5 = LinkedListNode('Fri')

node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5

node1.traverseList()

type(node5)

Ответы [ 2 ]

1 голос
/ 23 января 2020

Вы не проверяете, если type(node5) = None, ваше время l oop проверяет, если node != None.

На последней итерации node содержит node5, поэтому print(node.value) печатает Fri, node = node.next устанавливает node на None, как мы никогда не устанавливали node5 's next атрибут, а затем l oop завершается.

0 голосов
/ 23 января 2020

Проблема в том, что на последней итерации node устанавливается на None, потому что node5 имеет next из None. Вы можете избежать этого, вырвавшись из l oop при возникновении этого условия ...

def traverseList(self):
        node = self #Start at the Head Node
        while node != None:
            print(node.value) #Access the node value
            if node.next is None:
                break
            else:
                node = node.next #Move to the next link in the list
...