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);
}
上图所示,主要优点如下:
1.双端链表,获取前后节点的负责度都是O(1)
2.无环,对链表的访问可以以null为终点
3.带头和尾节点,获取头尾的时间负责度都是O(1)
4. 链表计数器,对访问链表的大小的时间复杂度是O(1)
5.多态,链表接点使用指针来保存当前节点的值,所以支持不通类型的值