我很好奇刪除雙向鏈表中所有節(jié)點的正確方法是什么。這是我的鏈表結構:type ListNode struct { Data branch Next *ListNode Prev *ListNode}type doublyLinkedList struct { Head *ListNode Tail *ListNode Size int}如果我只是將 Head & Tail 節(jié)點指向 Nil,它會工作嗎?func deleteAllNodes(dl *doublyLinkedList) { dl.Head = nil dl.Tail = nil dl.Size = 0}如果是這樣,所有節(jié)點會發(fā)生什么?它會收集垃圾嗎?
1 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
在引用計數環(huán)境中(Arc
在 Rust、shared_ptr
C++、Swift 等中),這可能會泄漏。
節(jié)點之間可能有引用,但沒有其他引用指向它們。在圖論術語中,被“刪除”的節(jié)點形成對象圖的一個組成部分,現在是一個斷開連接的圖。
任何具有跟蹤垃圾收集器(包括 Go)的環(huán)境都可以處理這個,沒問題。
首先,GC 將檢測內存圖的所有連接組件(那些從根引用引用的對象,如全局變量、局部變量等)。這稱為“標記”階段。然后,它將在第二個“掃描”階段刪除所有斷開連接的組件。https://en.wikipedia.org/wiki/Tracing_garbage_collection#Na%C3%AFve_mark-and-sweep
- 1 回答
- 0 關注
- 107 瀏覽
添加回答
舉報
0/150
提交
取消