我们不使用这个单链表时,我们需要把他在内存中释放掉,以便于流出空间给其他程序和软件使用。
单链表整表删除的算法思路如下:
- 声明结点p和q;
- 将第一个结点赋值给p,下一个结点(也就是第一个结点的下一个结点)赋值给q;
- 循环执行释放p和(释放完p之后)将q赋值给p的操作。(也就是说循环从这个单链表的头部开始每一个都释放调,往上接龙释放)
ClearList.c代码如下:
Status ClearList(LinkList *L)
{
LinkList p,q;//声明了两个结点一个是p一个是q
p=(*L)->next;//将p指向了我们L单链表的next也就是第一个结点
while(p)//只要p不为NULL也就是不为假的情况下,也就是有数据的情况下有数据就为真(编程规定为0就是假,非0就是真)
{
q=p->next;//指向第二个
free(p);//把第一个给释放掉
p=q;//第二个就继承了第一个的位置
}
(*L)->next=NULL;//最后的化这个单链表记得指向NULL,变成一个空表。空表就是Head指向NULL嘛,整个释放完之后
return OK;
}
把后边代码改一下呢?让q没有存在的必要呢??
free(p);
p=p->next;
上述这种写法?因为p是一个结点,他除了有数据域还有指针域,当我们做free(p)的时候,其实是对他整个结点进行删除和内存释放的工作,而我们整