redis链表定义(双链表)
typedef struct listNode {
struct listNode *prev;
struct listNode *next;
void *value;
} listNode;
typedef struct list {
listNode *head;
listNode *tail;
void *(*dup)(void *ptr);
void (*free)(void *ptr);
int (*match)(void *ptr, void *key);
unsigned int len;
} list;
可见该链表为双链表结构,但不是循环双链表。 也就是说head指针的prev为NULL, tail指针的next为NULL,维护head和tail两个指针可以高效的在头和尾进行插入和删除操作。同样未使用哨兵节点。处理head节点为NULL时特殊处理下即可。
总结
该双链表没有什么特殊的地方,简洁够用。