我必须编写一个函数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/

10-13 04:57