您必须遍历列表并释放每个节点.如果只将head和tail指针设置为NULL,那么列表节点仍然在堆中,并且没有指向它们的指针,这是典型的内存泄漏.
这是一些伪代码:
Node* current = head;
while( current != NULL ) {
Node* next = current->Next;
free( current );
current = next;
}
// done
Run Code Online (Sandbox Code Playgroud)
你当然可以从头到尾遍历 - 没有任何重大区别.
如果它们是动态分配的,则需要释放节点.请记住,如果您的节点持有指向某些数据的指针,并且该数据也是动态分配的,那么您也需要释放它.
就像是:
list_node* node = head;
while (node)
{
/* depends */
/* free(node->data); */
list_node* next = node->next;
free(node);
node = next;
}
Run Code Online (Sandbox Code Playgroud)