微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除链表的第一个元素——我更简单的解决方案是否正确,或者删除的节点是否仍然占用内存?

如何解决删除链表的第一个元素——我更简单的解决方案是否正确,或者删除的节点是否仍然占用内存?

参加有关数据结构的 google/udacity 课程,但不幸的是,有时在解释方面存在很大差距。我的任务是删除链表中的第一个节点。 (Python)

在我的解决方案中,如果存在,则将头部简单地替换为列表中的下一个节点,否则将头部设置为无。但是之前占据头部的节点会发生什么?它只是消失了,还是仍然占用了一些内存? 在我的链表类中,我的 delete_first() 方法如下所示:

    def delete_first(self):
        if self.head.nextNode:
            self.head = self.head.nextNode
        else: 
            self.head = None

然而,在我参加的在线课程中,他们提供的解决方案如下,但遗憾的是他们没有解释为什么看起来像这样(尤其是返回已删除的元素): >

    def delete_first(self):
        if self.head:
            deleted_element = self.head
            temp = deleted_element.next
            self.head = temp
            return deleted_element
        else:
            return None

或者:

def delete_first(self):
    deleted = self.head
    if self.head:
        self.head = self.head.next
        deleted.next = None
    return deleted

解决方法

您的代码很好,只是它假定列表不为空。您应该保护您的代码免受这种情况的影响。其余的可以简化为:

def delete_first(self):
    if self.head:  # Protect against the case where the list is empty
        self.head = self.head.nextNode

您给出的其他代码示例只是看起来不同,因为它们想要返回已删除的节点。这在某些情况下可能有用,但更多时候不是。这实际上取决于使用链表的算法的需求。

在你的代码中——你不返回被移除的节点——垃圾收集器将负责释放相关的内存,条件是你的代码在某处仍然没有对被移除节点的引用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。