我正在学习DS,并看到了链表上黑客排名的简短视频教程。
这几乎是不言自明的,但我无法理解她说的一点">如果我们预先附加,那么我们将有一点问题"。在这里,她基本上告诉移动将代码附加到另一个类中。 我试图理解和可视化她的实际意思,以及如果我们将其保留在 Node 类本身中可能会有什么潜在问题。她提到了,但我无法理解这个概念。
这是链接 : https://www.youtube.com/watch?v=njTh_OwMljA&t=186s 时间:3:01。
有人可以再详细说明一下。
当您尝试预追加(在开头附加值(时会出现特定问题。
节点类创建多个对象。 假设您的列表是这样的,1->2->3->4->5
每个数字都是一个节点。
现在你想做正常的追加(在最后(,你调用3.append()
。current
指向3
,则迭代到最后一个节点并附加它。这里没有问题。
现在,当您尝试预附加它时,理想情况下,您正在更改列表中存在的每个节点的头部。
假设您要预先附加0
。您的列表应如下所示0->1->2->3->4->5
.0
是链表的实际负责人。
如果你以同样的方式调用3.pre_append()
,你最终会得到类似的东西
1->2->3 X 0->3->4->5
,您将更改从中调用函数的节点的头部,而不是您要做的整个链表的头部。
因此,只有该节点的头部会发生变化,所有其他节点都不知道谁的头部是谁,或者更糟糕的是,根据谁调用pre_append,可能会有多个头部。
为了避免这种对头的访问受到限制,因此pre_append方法被转移到另一个类,其中只有一个节点可以引用为头。