}
else
newlist->next = NULL;
Head = newlist;
return Head;
}
链表节点现在建立在数据值副本的基本之上。这个版本能很好地处理标量值,但不能处理
带有用 malloc
或 new 分配的元素的对象。要处理这些对象,LIST 结构需要包含一个一般
的解除函数指针,这个指针可用来在将节点从链表中删除并解除它之前释放内存(或者
关闭文件,或者调用关闭方法)。
一个带有解除函数的链表
typedef void (*ListNodeDestructor)( void * );
typedef struct liststruct
{
ListNodeDestructor DestructFunc;
liststruct *next;
} LIST, *pLIST;
pLIST AddToList( pLIST Head, void * data, size_t datasize,
ListNodeDestructor Destructor )
{
pLIST newlist=NULL;
void *p;
// 分配节点内存和数据内存