【问题标题】:why does iterating with current.next works on linked list为什么用 current.next 进行迭代对链表有效
【发布时间】:2021-07-01 20:00:24
【问题描述】:

当我运行以下代码并运行时,我试图跳过每个备用节点。

def skip_alternate_node(head):
    current = head
    while current.next:
        current.next = current.next.next
    return current

我无法理解为什么 current.next 在我什至没有移动电流的情况下工作。 换句话说,当我不做current = current.next 时,为什么current.next = current.next.next 有效? current.next 是否也是堆栈上的指针,就像 current 指向堆上的分配一样?

【问题讨论】:

  • 你要搬家了current.next
  • 您正在修改节点的下一个值,而不是将当前更改为新节点
  • 您在每次迭代中修改列表,从列表中删除旧的current.next 并用后面的节点替换它。它基本上删除了current之后的每个节点。
  • Python 不太适合作为您正在寻找的抽象级别的语言。无论如何,这样的问题不是 Stack Overflow 的话题。这不是一个讨论论坛,因此不是获得了解计算机科学帮助的地方。例如,您可以尝试reddit.com/r/learnprogramming
  • @TomKarzes:这确实让我问为什么它被命名为skip_alternate_node,而实际效果是“删除head之后的所有节点”。

标签: python linked-list singly-linked-list


【解决方案1】:

在您的代码中,current 仍然等于 head。唯一发生变异的是current.next,最终会变成None。所以这段代码是一种精心设计的方法:

head.next = None
return head

您的代码返回原始的head 引用,但它已被更改,因此它已成为列表中的唯一节点。无法再从head 访问所有其他节点。

我试图跳过每个备用节点

保留一个节点和删除一个节点之间交替的代码需要current来遍历列表。因此,将current = current.next 添加到循环体中,并在while 条件中添加额外的保护措施:

def skip_alternate_node(head):
    current = head
    while current and current.next:
        current.next = current.next.next
        current = current.next  #  <------ add this
    return head  # and return the original head reference

【讨论】:

    【解决方案2】:

    current.next 是对另一个列表节点的引用。每个节点都有一个next 属性指向它之后的节点。因此,current.next.next 是当前元素之后的第二个元素。

    所以每次通过循环,你改变当前元素的next链接指向下一个元素之后的元素。当循环经过列表的最后一个元素时,循环将停止,因此current.next 将变为None,并且列表将只包含原始的头元素。

    该函数不应修改任何内容,也不需要循环。它应该只检查是否有下一个节点。如果有,它应该返回之后的那个。

    def skip_alternate_node(head):
        return head.next and head.next.next
    

    【讨论】:

    • 我认为您的替代建议没有意义。我不是 100% 确定 skip_alternate_node 应该做什么,但我怀疑这只是“获取第二个节点”(尽管如果我假设它应该获取所有其他节点是正确的,这将是一个工具可以通过重复调用这个函数来构建这样一个生成器,产生每个结果直到它返回None)。
    • @ShadowRanger 因为他的函数返回一个节点,我猜这就是他真正想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2018-11-17
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多