为了账号安全,请及时绑定邮箱和手机立即绑定

如何删除双向链表中的所有节点?

如何删除双向链表中的所有节点?

Go
慕莱坞森 2022-12-26 10:29:13
我很好奇删除双向链表中所有节点的正确方法是什么。这是我的链表结构:type ListNode struct {    Data branch    Next *ListNode    Prev *ListNode}type doublyLinkedList struct {    Head *ListNode    Tail *ListNode    Size int}如果我只是将 Head & Tail 节点指向 Nil,它会工作吗?func deleteAllNodes(dl *doublyLinkedList) {    dl.Head = nil    dl.Tail = nil    dl.Size = 0}如果是这样,所有节点会发生什么?它会收集垃圾吗?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

在引用计数环境中(Arc在 Rust、shared_ptrC++、Swift 等中),这可能会泄漏。

节点之间可能有引用,但没有其他引用指向它们。在图论术语中,被“删除”的节点形成对象图的一个组成部分,现在是一个断开连接的图。

任何具有跟踪垃圾收集器(包括 Go)的环境都可以处理这个,没问题。

首先,GC 将检测内存图的所有连接组件(那些从根引用引用的对象,如全局变量、局部变量等)。这称为“标记”阶段。然后,它将在第二个“扫描”阶段删除所有断开连接的组件。https://en.wikipedia.org/wiki/Tracing_garbage_collection#Na%C3%AFve_mark-and-sweep


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信