当前dtor如下所示:
~list(){
ListNode* curr = head;
while (curr!= nullptr){
std::cout<<"Freeing\n";
ListNode* temp = curr;
curr = curr->next;
delete temp;
}
}
如果链表恰好有一个循环,则此dtor的while循环将永远运行。在这种情况下释放内存的正确方法是什么?
答案 0 :(得分:2)
在这种情况下释放内存的正确方法是什么?
首先检测是否存在循环。如果您检测到一个周期,则可以通过修改指向该节点的节点来取消该周期,使其指向null(或列表使用的哨兵值)。然后正常删除。
例如,您可以使用草龟和野兔算法来检测周期。