C语言链表 删除

Python023

C语言链表 删除,第1张

struct LNode * delete(LNode * head)

{

    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    

}