首先,给出redis中链表节点的定义:
typedef struct listNode {
struct listNode *prev; // 前置节点
struct listNode *next; // 后置节点
void *value; // 节点值域
}listNode;
可以看出,这里的链表是双端链表。下面是链表的定义:
typedef struct list {
listNode *head; // 链表头结点
listNode *tail; // 链表尾结点
unsigned long len; // 链表长度
void *(*dup) (void *ptr); // 节点复制函数
void (*free) (void *ptr); //节点释放函数
int (*match) (void *ptr, void *key); // 节点对比函数
}list;