Lin*_*yen 4 c malloc free declaration linked-list
看一下这段代码,它想要释放 C 中链表内所有分配的节点:
ptr = list;
while (ptr != NULL)
{
node *next = ptr->next;
free(ptr);
ptr = next;
}
Run Code Online (Sandbox Code Playgroud)
原因是,在释放当前节点之前,我们需要一个临时变量 next 来存储指向下一个节点的指针。
你看到它node *next = ptr->next;在循环内部了吗?这样每次循环运行时,都会创建一个新的临时节点来存储指向下一个节点的指针。如果我们在循环外部创建变量节点并在循环内部重新分配它,是不是更好?
像这样:
ptr = list;
node *next = NULL;
while (ptr != NULL)
{
next = ptr->next;
free(ptr);
ptr = next;
}
Run Code Online (Sandbox Code Playgroud)
这样效率会更高吗?