一. 双向链表
每个节点都有2个指针:一个指向前一个节点、另一个指向后一个节点。
因此可以从任意一个节点开始,双向遍历整个链表;
双向链表节点由三部分组成:数据、前驱指针、后继指针;
二. 双向链表API
list_add() //将新节点添加到双向链表头部
list_add_tail() //将新节点添加到双向链表尾部
list_del() //删除节点
list_for_each_entry() //遍历节点
2.1 void list_add(struct list_head *new, struct list_head *head);
参数:new_node:新结点指针,head:头结点指针
2.2 void list_del(struct list_head *entry);
参数:是一个有效的结点指针;
功能:调用了__list_del(entry->prev, entry->next);
把当前结点的上个结点和下个结点作为参数传给 __list_del,删除了自己
2.3 list_for_each_entry(pos, head, member)
参数:
Pos: 要用作循环计数器的结构体类型指针
Head: 链表头结点指针
Member: 结构中 struct list_head 的成员名称
参考: