一、数据结构
链表作为列表键的底层实现之一,当列表中包含了数量比较多的元素,又或者列表中都是比较长的字符串时,列表就会使用链表作为底层的实现。
typedef struct listNode {
listNode * prev;
listNode * next;
void * value;
}listNode;
typedef struct list {
listNode * head;
listNode * tail;
unsigned long len;
//节点复制函数
void *(*dup) (void* ptr);
//节点值释放函数
void (*free) (void* ptr);
//节点值对比函数
void (*match) (void* ptr, void* key);
}list;
二、API
| 函数 | 作用 | 时间复杂度 |
|---|---|---|
| listLength | 返回链表长度 | O(1) |
| listFirst | 返回链表的头节点 | O(1) |
| listLast | 返回链表的尾节点 | O(1) |
| listPrevNode | 返回给定节点的前驱结点 | O(1) |
| listNextNode | 返回给定节点的后继结点 | O(1) |
| listNodeValue | 返回给定节点保存的值 | O(1) |
| listCreate | 创建一个不包含任何节点的链表 | O(1) |
| listAddNodeHead | 在链表的头部添加一个节点 | O(1) |
| listAddNodeTail | 在链表的尾部添加一个节点 | O(1) |
| listInsertNode | 在一个节点的前面或后面插入一个节点 | O(1) |
| listSearchKey | 查找节点值为给定值的节点 | O(n) |
| listIndex | 返回给定索引的节点 | O(n) |
| listDelNode | 从链表删除给定节点 | O(n) |
| listDup | 复制一个给定链表的副本 | O(n) |
| listRelease | 释放链表所有节点 | O(n) |