单链表的整表删除

当我们不打算使用某个单链表时,需要把它销毁,也就是在内存中将其释放掉。

算法思路如下:

1. 声明一结点p和q;

2. 将第一个结点赋值给p;

3.循环:

         将下一结点值赋值给q;

         释放p;

         将q值赋值给p

Status ClearList(LinkList *L)
{
    LinkList p,q;
    p = (*L)->next; //p指向第一个结点
    
    while(p)        //没到表尾
{
    q = p->next;
    free(p);
    p = q;
}
    (*L)->next = NULL ;  //头结点指针域为空
    
    return OK;
}

这段代码里,常见的错误是有人会觉得q没有必要存在。因此写成 free(p),p=p->next。这样是错误的,为何?

因为p是一个结点,它除了有数据域还有指针域,在删除的时候是对整个结点进行删除和内存释放的工作,如果先free(p)了,删掉了指针域,那么下一个要删除的结点的物理地址是未知的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值