如何为有循环的linkedList释放内存?

时间:2019-03-29 16:31:42

标签: c++

当前dtor如下所示:

~list(){
    ListNode* curr = head;
    while (curr!= nullptr){
        std::cout<<"Freeing\n";
        ListNode* temp = curr;
        curr = curr->next;
        delete temp;
    }
}

如果链表恰好有一个循环,则此dtor的while循环将永远运行。在这种情况下释放内存的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

  

在这种情况下释放内存的正确方法是什么?

首先检测是否存在循环。如果您检测到一个周期,则可以通过修改指向该节点的节点来取消该周期,使其指向null(或列表使用的哨兵值)。然后正常删除。

例如,您可以使用草龟和野兔算法来检测周期。