如果一个链表达到其最后一个值,将会发生什么

时间:2016-11-12 04:28:57

标签: python linked-list

我应该分析一个mystery方法,并使用此图片中的链接列表模拟电话mystery(x,y)

The linked list

第一次执行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

1 个答案:

答案 0 :(得分:1)

查看循环条件。 bNone时,该函数将停止循环。如果在a成为a.next之前NonebNone,那么它也可能会因异常停止,因为在这种情况下查找a.next.next将会{无效(因为None没有next属性)。您的图片中的链接列表不会发生这种情况。

您对循环发生时不同变量如何变化的描述似乎不正确。在循环的第二次迭代之后,a将成为对3节点的引用,b将是对8节点的引用。我建议再仔细阅读代码。

这里简要介绍了在循环的前两次迭代中值如何变化:

  1. 调用该函数时,a绑定到x(对1节点的引用)并且b绑定到y(a引用6节点。)
  2. while语句将检查b是否为None。它不是,所以我们进入循环体。
  3. t绑定到a.next.next。这是3节点。
  4. a.next.next被反弹到b。这使得2节点的箭头指向6节点而不是3节点。
  5. a被反弹为b,因此a现在指向6节点。
  6. b被反弹为t,因此它指向3节点。
  7. 我们已经到了循环的末尾,所以我们回到顶部并重新测试循环条件。
  8. b仍然不是None,因此我们会继续循环播放。
  9. t被反弹到a.next.next,这是8节点。
  10. a.next.next被反弹到b,因此7节点的箭头开始指向3节点而不是8节点。
  11. a被反弹为b,因此它指向3节点。
  12. b被反弹为t,因此它指向8节点。
  13. 我们再说一次......