C语言链表删除问题

2025-03-18 20:07:10
推荐回答(4个)
回答1:

所谓链表,就是用指针将内存中动态分配的结点空间,链接起来成一个表。
所以,建表的过程即是每次为新结点分配内存;因此,释放空间的话,也要从头到尾,一个一个结点的释放,这样才能全部释放掉。
这段代码释放了整个链表空间内存;while循环的作用是从头到尾释放后续结点,如果直接free(pHead)则后面的结点将无法找到,那么造成内存空间泄露。
另外,你的while循环存在一个错误,假设释放了倒数第一个结点后,pHead指向最后一个结点,而最后一个结点的next为NULL,那么这样最后一个结点也没有释放掉,while就退出了。

回答2:

这个就需要你判断了,你首先需要将链表的数据全部遍历一遍,在遍历的同时就判断该数据是否为你要删除的数据,如果是,就删除,继续遍历……一直到结束,这样就可以吧1全部删除了。
满意请采纳!

回答3:

BOOL remove(linklist l, int x)
{
    linklist p=l->next;
    if(!p)
    {
        printf("Empty linklist!\n");
        return FALSE;
    }
    while(p&&p->data!=x) p=p->next;
    if(!p)
    {
        printf("Designated data not found!\n");
        return FALSE;
    }
    if(p->next!=NULL)
    {
        linklist q=p->next;
        p->data=q->data;
        p->next=q->next;
        free(q);
    }
    else
    {
        linklist q=l;
        while(q->next!=p) q=q->next;
        q->next=NULL;
        free(p);
    }
    prin(l);
    return TRUE;
}

回答4:

num
应该是链表节点的一个属性
比如
int
num;
num
!
=
p->num;是一句判断语句,在判断
当前节点p的num值
是否与
查询的num值相同,如果相同,代表这个节点就是需要删除的