我应该分析一个mystery
方法,并使用此图片中的链接列表模拟电话mystery(x,y)
:
第一次执行a = 6 t = 3 b = 3, a.next.next = 6
第二次执行t = /, a = 7, b = /, a.next.next = /
第三次执行时,a
已经达到最后一个值,在这种情况下,迭代会停止吗?或者它继续使用值a = /
?
有人可以向我解释如果继续下去将会发生什么?
这里的代码格式正确:
def mystery(a,b):
while b != None:
t = a.next.next
a.next.next = b
a = b
b = t
答案 0 :(得分:1)
查看循环条件。 b
为None
时,该函数将停止循环。如果在a
成为a.next
之前None
或b
为None
,那么它也可能会因异常停止,因为在这种情况下查找a.next.next
将会{无效(因为None
没有next
属性)。您的图片中的链接列表不会发生这种情况。
您对循环发生时不同变量如何变化的描述似乎不正确。在循环的第二次迭代之后,a
将成为对3
节点的引用,b
将是对8
节点的引用。我建议再仔细阅读代码。
这里简要介绍了在循环的前两次迭代中值如何变化:
a
绑定到x
(对1
节点的引用)并且b
绑定到y
(a引用6
节点。)while
语句将检查b
是否为None。它不是,所以我们进入循环体。t
绑定到a.next.next
。这是3
节点。a.next.next
被反弹到b
。这使得2
节点的箭头指向6
节点而不是3
节点。a
被反弹为b
,因此a
现在指向6
节点。b
被反弹为t
,因此它指向3
节点。b
仍然不是None
,因此我们会继续循环播放。t
被反弹到a.next.next
,这是8
节点。a.next.next
被反弹到b
,因此7
节点的箭头开始指向3
节点而不是8
节点。a
被反弹为b
,因此它指向3
节点。b
被反弹为t
,因此它指向8
节点。