销毁单链表问题

来源:百度知道 编辑:UC知道 时间:2024/06/23 15:03:11
void DestoryList(LNode *head)
{
LNode *p,*q;
p=head;
q=head->next;
while(p)
{
free(p);
p=q;
q=q->next;
}
}
这个有什么错误吗??运行时有问题

void DestoryList(LNode *head)
{
LNode *p,*q;
p=head;
q=head->next;
while(p)
{
free(p);
p=q;

/* 使用指针前判断其非空 */
if (q)
q=q->next;
}
}

while循环中,p指向最后一个结点时,执行一次,free(p)释放p的空间,但下面来那个剧仍旧执行了,但q->next已经为空,所以报错。你改为do……while()格式。
do{
p=q;
q=q->next;
free(p);
}while(p);
应该是你的最后一个节点的next没有指空null。