// 功能: 释放链表( 要求: 链表节点的第一个元素为 next 指针 ) // 参数: __head_addr : 链表头指针( _head )的地址( &_head ). 实为指针的指针.
// struct node_t
// {
// struct node_t *next;
// ...
// };
// struct node_t *_head = NULL;
// ...
// free_list( &_head );
static void free_list( void *__head_addr )
{
void *_head, *_free; // 取链表头指针
_head = *( void ** )__head_addr;
while( NULL != _head )
{
_free = _head; //
_head = _head->next // 因为 next 指针为节点的第一个元素
// 又因 _head 为节点首字节的地址
// 所以 _head 为 next 指针的地址
// 所以 next = *_head _head = *( void ** )_head;
free( _free );
}
// 将链表的头指针置空
*( void ** )__head_addr = NULL;
}
阅读(882) | 评论(0) | 转发(0) |