我很好奇删除双向链表中所有节点的正确方法是什么。这是我的链表结构: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_ptr
C++、Swift 等中),这可能会泄漏。
节点之间可能有引用,但没有其他引用指向它们。在图论术语中,被“删除”的节点形成对象图的一个组成部分,现在是一个断开连接的图。
任何具有跟踪垃圾收集器(包括 Go)的环境都可以处理这个,没问题。
首先,GC 将检测内存图的所有连接组件(那些从根引用引用的对象,如全局变量、局部变量等)。这称为“标记”阶段。然后,它将在第二个“扫描”阶段删除所有断开连接的组件。https://en.wikipedia.org/wiki/Tracing_garbage_collection#Na%C3%AFve_mark-and-sweep
- 1 回答
- 0 关注
- 77 浏览
添加回答
举报
0/150
提交
取消