redis中链表的数据结构定义如下:
// 链表中的节点
typedef struct listNode {
// 节点的前驱
struct listNode *prev;
// 节点的后继
struct listNode *next;
// 节点上保存的值
void *value;
} listNode;
typedef struct listIter {
listNode *next;
int direction;
} listIter;
// redis使用list来代表一个链表
typedef struct list {
// 链表头结点,head->prev为NULL
listNode *head;
// 链表为节点,tail->next为NULL
listNode *tail;
// 用于复制链表节点中保存的值
void *(*dup)(void *ptr);
// 用于释放链表节点保存的值
void (*free)(void *ptr);
// 用于对比链表节点所保存的值和另一个输入值是否相等
int (*match)(void *ptr, void *key);
unsigned long len;
} list;
如下图所示是redis中由一个list结构和三个listNode结构组成的链表: