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” 了吗?如果看懂了 ,这个也应该没问题的。因为他们类似的,都起到一个指针传递的作用。