我必须编写一个函数DeleteList(),该函数接受一个列表,释放其所有内存,并将其头指针设置为空(空列表)。
它看起来是可行的,但是idk如果它真的可行的话,因为我实现的方式(我认为是错误的方式)与解决方案中的方式非常不同。我假设它只删除几个节点,或者内存管理有问题。
int Length(struct node* head)
{
int count = 0;
struct node* current = head;
while (current != NULL)
{
count++;
current = current->next;
}
return(count);
}
void DeleteList(struct node** headRef)
{
int len = Length(*headRef);
for(int i = 0;i<len;i++)
free(*headRef);
*headRef = NULL;
}
最佳答案
实际上并没有释放整个链接列表,而是反复释放头节点。我建议你用下面的方法。
void DeleteList(struct node** headRef) {
struct node *ptr = *headRef;
struct node *temp = NULL;
while(ptr)
{
temp = ptr;
ptr = ptr->next;
free(temp);
}
*headRef = NULL;
}
关于c - 这是DeleteList函数的正确实现吗? [通过堆链接的列表],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51900015/