优先队列代码疑问:移除循环条件片段后触发NoneType异常原因咨询
问题原因拆解
- 原循环里的
current.next是用来防止遍历超出链表末尾的。当你遍历到链表最后一个节点时,current.next是None,这时候循环会停止,你可以直接把新节点挂在这个最后节点的后面。 - 要是删掉
current.next,循环条件只剩下优先级判断的话,当所有现有节点的优先级都比新节点低时,循环会一直执行current = current.next,直到current变成None(因为最后一个节点的next就是None)。接下来再判断循环条件时,你要访问current.prior,但None根本没有prior属性,自然就抛出那个异常了。 - 举个实际场景:链表只有一个节点X,新节点的优先级比X高。原逻辑里,因为
current.next是None,循环停在X,把新节点接在X后面。如果去掉current.next,循环会先判断X的prior小于新节点,然后current变成X.next也就是None,下一轮循环要拿None.prior来比较,直接报错。
内容的提问来源于stack exchange,提问作者Volpina
相关产品推荐
相关产品推荐

