链表销毁的基本思想
上次说了链表的构建,现在呢链表的销毁,他要是销毁,必须释放所有成员的内存
空间,现在一个问题摆在面前,到底我们是从前往后删,还是从后往前删?
如果从后往前删,我们先要用指针指向最后一个结构体的前驱结点的next的值,修改
前驱结点的next的值为空,然后用指针释放最后一个结构体的空间,但是这里最后一
个结构体的前驱结点的next还得你写程序判断,相对从前往后删来说比较麻烦,所以
我们用的是从前往后删。
具体步骤
先让p指向,头结点后面那个第一个有效节点。 (红色箭头的p)
然后把头结点的next值修改成,现在第一个有效节点的next成员的值(蓝色的箭头)
然后再释放p,这样不会使链表中途断开,一直删完。当删到最后一个时,head->next变为NULL,销毁正式结束。
程序的实现
void destroy(point *head)
{
point *p;
while (head->next)
{
p = head->next;
head->next = p->next;
free(p);
}
}