摧毁和清空的含义及区别
摧毁
是先销毁了链表的头,然后接着一个一个的把后面的销毁了,这样这个链表就不能再使用了,即把包括头的所有节点全部释放。
清空
是先保留了链表的头,然后把头后面的所有的都销毁,最后把头里指向下一个的指针设为空,这样就相当与清空了,但这个链表还在,还可以继续使用;即保留了头,后面的全部释放。
区别:
清空是链表的头还在,可以继续插入节点;销毁就是链表没了,整个链表(包括头)的空间都被释放了,不能进行任何操作了。
摧毁链表实例
int destroy(struct node *head)
{
struct node *p; //定义结构体指针
if(head==NULL)//如果链表不存在则返回0
{
return 0;
}
while(head != 0)//如果存在则进行摧毁,直到head为空,所有节点被销毁
{
p = head->next;//把head指向的下一个节点被P保存
free(head);//释放掉head指向的节点
head = p;//把P保存的节点被head保存
}
};
清空链表实例
int clear(struct node *head)
{
struct node *p;//定义结构体指针
struct node *q;
if(head == 0)
{
return 0;
}
p = head->next;//把头节点的下一个节点被p保存
while(p != 0)//当p存在时,进行清空操作
{
q = p->next;//使q保存p指向的下一个节点
free(p);//释放掉P里的内容
p = q;//让p保存q指向的节点
}
head->next = NULL;//当上面循环完成时,已经只有一个头结点存在,使head- >next=NULL,表示链表结束
};
下面是完整代码示例
发现一个vi编辑器的小技巧,:set nonumber可以删除代码前的序号
/*********************************************************************************
* Copyright: (C) 2017 fanmaolin<fanmaolinn@gmail.com>
* All rights reserved.
*
* Filename: make4.c
* Description: This file
*
* Version: 1.0.0(08/05/2017)
* Author: fanmaolin <fanmaolinn@gmail.com>
* ChangeLog: 1, Release initial version on "08/05/2017 07:24:41 AM"
*
********************************************************************************/