{
LNode * node = head
LNode ** parent = &head
double min, max
printf("请输入min和max: ")
scanf("%lf %lf", &min, &max)
while (node)
{
// 大于min和小于max,则删除节点
if (node->data > min && node->data < max)
{
*parent = node->next
// 如果你的LNode是malloc出来的,需要free(node)
node = *parent
}
else
{
node = node->next
parent = &node->next
}
}
return head
// 这个逻辑不需要给你太多注释,你只需要拿一支笔,手动画一个3个节点的链表,
// 然后从函数执行开始,一步一步去推怎么执行的就懂了。
// 至于你的程序的错误,没帮你看
}
所谓链表,就是用指针将内存中动态分配的结点空间,链接起来成一个表。
所以,建表的过程即是每次为新结点分配内存;因此,释放空间的话,也要从头到尾,一个一个结点的释放,这样才能全部释放掉。
这段代码释放了整个链表空间内存;while循环的作用是从头到尾释放后续结点,如果直接free(pHead)则后面的结点将无法找到,那么造成内存空间泄露。
另外,你的while循环存在一个错误,假设释放了倒数第一个结点后,pHead指向最后一个结点,而最后一个结点的next为NULL,那么这样最后一个结点也没有释放掉,while就退出了。
while循环应该更正为:
while(pHead != NULL){
pNext = pHead->next
free(pHead)
pHead = pNext
}