- 论坛徽章:
- 0
|
1.通常的单链表释放code
p=q;
while(p)
{
q=p->next;
free(p);
p=q;
}
2.通用的带有一定限制的释放单链表的code
/* ==========================================================
* 开发人员:
* 编写时间:
* 函数名称:
* 参数说明:
* 功能说明:释放next做为链表第一个成员的链表的内存
链表的结构必需是:
typedef struct linktype_s
{
struct linktype_s * next;
......
......
}LINKTYPE;
*/
void free_nextbegin_link(void * link)
{
long next;
if(link==NULL) return;
while(link!=NULL)
{
next=*((long*)link);
free(link);
link=(void*) next;
}
return;
}
/* ==========================================================
* 开发人员:
* 编写时间:
* 函数名称:free_nextbegin_link
* 参数说明:
link :需要释放的链表的头节点
nodesize :每个节点的大小
* 功能说明:释放next做为链表最后一个成员的链表的内存
链表的结构必需是:
typedef struct linktype_s
{
......
......
struct linktype_s * next;
}LINKTYPE;
*/
void free_nextend_link(void * link,size_t nodesize)
{
char *next;
if(link==NULL) return;
while(link!=NULL)
{
next=(char*)link+(nodesize-sizeof(long*));
free(link);
link=(void*)(*((long*)next));
}
return;
}
3.通用的释放单链表的函数,
综合2就可以了,主要获取next成员的偏移就可以了,^_^
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/12175/showart_219046.html |
|