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

我很好奇删除双向链表中所有节点的正确方法是什么。


这是我的链表结构:


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

}

如果是这样,所有节点会发生什么?它会收集垃圾吗?


慕莱坞森
浏览 78回答 1
1回答

慕丝7291255

在引用计数环境中(Arc在 Rust、shared_ptrC++、Swift 等中),这可能会泄漏。节点之间可能有引用,但没有其他引用指向它们。在图论术语中,被“删除”的节点形成对象图的一个组成部分,现在是一个断开连接的图。任何具有跟踪垃圾收集器(包括 Go)的环境都可以处理这个,没问题。首先,GC 将检测内存图的所有连接组件(那些从根引用引用的对象,如全局变量、局部变量等)。这称为“标记”阶段。然后,它将在第二个“扫描”阶段删除所有断开连接的组件。https://en.wikipedia.org/wiki/Tracing_garbage_collection#Na%C3%AFve_mark-and-sweep
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go