《大话数据结构》--学习笔记10 ***重点***

3.10 单链表的整表删除

当我们不打算使用这个单链表时,我们需要把它销毁,其实也就是在内存中将它释放掉,以便留出空间给其他程序员或软件使用。

单链表的整表删除的算法思路如下:

1.声明一结点p和q;

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

3.循环:

& 将下一结点赋值给q;

& 释放p;

&将q赋值给p;

实现单链表的整表删除代码算法如下

/*初始化条件:顺序线性表L已存在,操作结果:将L重置为空表*/

Status  ClearList  (LinkList   *L)

{

        ListList  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)时,其实时在对它整体结点进行删除和内存释放工作。

怎么说呢?你看懂《大话数据结构》--学习笔记9 ***重点*** 尾插法中的那句:“r=p” 了吗?如果看懂了 ,这个也应该没问题的。因为他们类似的,都起到一个指针传递的作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值