2

在我的考试中有一个问题。

编写一个函数DeleteList(),它接受一个列表,释放其所有内存并将其头指针设置为 NULL(空列表)。

解决方案为

void DeleteList(struct node** headRef) {
    struct node* current = *headRef;
    struct node* next;
    while (current != NULL) {
        next = current->next; 
        free(current); 
        current = next; 
    }
    *headRef = NULL;
}

我的解决方案:

void DeleteList(struct node** headRef) {
    struct node* current = *headRef;

    while (current != NULL) {
        *headRef = *headRef->next;
         free(current);
         current = * headRef;
    }
    free(current);
    *headRef = NULL;
}

这是正确的方法吗?谢谢,

4

3 回答 3

1

您的解决方案没有这样做“并将其头指针设置为 NULL”,因为您的提案 ( *headRef = NULL;) 的最后一行不再将传入的 headRef 值设置为 NULL,而是列表中的最后一个 Next 点(已经为 null) .

于 2013-04-13T23:32:02.570 回答
0
void DeleteList(struct node **headRef)
{
    struct node *current = *headRef;

    while (current) {
         *headRef = (*headRef)->next;
         free(current);
         current = *headRef;
    }
    *headRef = NULL;
}
于 2013-04-13T22:24:20.733 回答
0
free(current); //you should remove this line after the while loop because when while loop breaks the current is already NULL so free(NULL) makes no sense. 
*headRef = NULL;

看这里Free(NULL)

其余的必须按照我的方式工作。

于 2013-04-13T19:29:34.717 回答