定义一个双向链表结构体
struct list_node
{
struct list_node *next; /* 指向后一个节点 */
struct list_node *prev; /* 指向前一个节点 */
};
typedef struct list_node list_t;
在循环双向链表表头后面插入一个节点
void list_insert_after(list_t *l, list_t *n)
{
l->next->prev = n; /* 第1步 */
n->next = l->next; /* 第2步 */
l->next = n; /* 第3步 */
n->prev = l; /* 第4步 */
}
在循环双向链表表头前面插入一个节点
void list_insert_before(list_t *l, list_t *n)
{
l->prev->next = n; /* 第1步 */
n->prev = l->prev; /* 第2步 */
l->prev = n; /* 第3步 */
n->next = l; /* 第4步 */
}
从循环双向链表删除一个节点
void list_remove(list_t *n)
{
n->next->prev = n->prev; /* 第1步 */
n->prev->next = n->next; /* 第2步 */
n->next = n->prev = n; /* 第3步 */
}