如何彻底销毁我的链表?例如,当我创建链接列表并调用打印列表功能时,没有任何事情发生,因为列表中没有任何内容。当我向列表中添加节点时,它会将它们打印出来。但是当我破坏我的列表并尝试打印列表时,我希望没有什么可以打印出来,但是我会断言。 *我的链表的头部也是一个虚拟节点
void destroyList(listNode *List)
{
listNode *temp = malloc(sizeof(listNode));
temp = List->next;
while (List != NULL)
{
temp = List;
List = List->next;
free(temp);
}
}
void printList(listNode * List)
{
List = List->next;
while (List != NULL)
{
printf("%d\n",List->val);
List = List->next;
}
}
答案 0 :(得分:2)
你是分裂的,因为你仍然试图爬下你不能做的free
指针链。只需将第一个->next
设置为NULL
,就可以了。
void destroyList(listNode *List)
{
listNode *temp; // removed malloc, it's not necessary.
listNode *originalHead = List;
temp = List->next;
while (List != NULL)
{
temp = List;
List = List->next;
free(temp);
}
originalHead->next = NULL;
}
答案 1 :(得分:0)
调用destroyList之后,您需要将List指针设置为NULL。因为它是传递值,所以必须将List指针的地址传递给destroyList。所以,我会这样做:
<select>
<option title="Description : " value="1">Java</option>
<option title="Description : " value="2">PHP</option>
<option title="Description : " value="3">Python</option>
</select>
然后你这样称呼它:
void destroyList(listNode **List) {
listNode *temp1, *temp2;
if (!List) {
return;
}
temp1 = *List;
while (temp1) {
temp2 = temp1->next;
free(temp1);
temp1 = temp2
}
free(*List);
}