adlist.h
/*
* 双向链表节点
*/
typedef struct listNode {
// 前节点
struct listNode *prev;
// 后节点
struct listNode *next;
// 本节点的值
void *value;
} listNode;
adlist.h
/*
* 双向链表
*/
typedef struct list {
// 表头节点
listNode *head;
// 表尾节点
listNode *tail;
// 节点复制函数
void *(*dup)(void *ptr);
// 节点释放函数
void (*free)(void *ptr);
// 节点对比函数
int (*match)(void *ptr, void *key);
// 双向链表长度
unsigned long len;
} list;