【问题标题】:Why does this while loop end? node5 is not NoneType. (Traversing Linked Lists)为什么这个while循环结束? node5 不是 NoneType。 (遍历链表)
【发布时间】:2020-05-09 23:57:21
【问题描述】:

代码如下。我从概念上理解循环结束是因为最终节点的 self.next = None,但我们正在检查 node != Nonetype(node5) 返回 __main__.LinkedListNode,而不是 None。那么node != None如何返回False,结束while循环呢?

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)

【问题讨论】:

  • 找到答案了吗?正如@CDJB 所说,问题在于node5 的nextNone,并且您尝试将条件应用于None。为避免这种情况,在您的for 循环中,一旦遇到具有nextNone 的节点,您可以将if node.next is None: break 置于循环之外。

标签: python python-3.x algorithm linked-list nodes


【解决方案1】:

你不是在检查type(node5) = None,你的while循环检查是否node != None

在最后一次迭代中,node 持有node5,所以print(node.value) 打印Frinode = node.nextnode 设置为None,因为我们从未设置node5next 属性,然后while循环终止。

【讨论】:

  • 当然,我对else 的声明不够认真。谢谢。
【解决方案2】:

问题在于,在最后一次迭代中,node 被设置为None,因为node5nextNone。当遇到这种情况时,您可以通过跳出循环来避免这种情况......

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

【讨论】:

    猜你喜欢
    • 2017-04-18
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多