background image

}

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;

// 分配节点内存和数据内存