如何解决删除链表的第一个元素——我更简单的解决方案是否正确,或者删除的节点是否仍然占用内存?
参加有关数据结构的 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 举报,一经查实,本站将立刻删除。