Linux双向链表操作实现教程,linux教程
Linux双向链表操作实现教程,linux教程
Linux双向链表操作实现教程
代码位于include/linux/list.h,链表初始化:
static inline void INIT_LIST_HEAD(struct list_head *list) { list->next = list; list->prev = list; }
初始化后,链表状态图,框图左侧为prev指针,右侧为next指针:
利用list_add_tail函数首次插入一个节点 ,代码:
static inline void list_add_tail(struct list_head *new, struct list_head *head) { __list_add(new, head->prev, head); } static inline void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next) { next->prev = new; new->next = next; new->prev = prev; prev->next = new; }
首个节点new1插入之后的链表框图:
继续调用list_add_tail函数插入第二个节点new2的框图如下:
双向链表循环代码:
#define list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); pos = pos->next)
循环处理的顺序与list_add_tail的顺序相同,首先由header的next指针开始,也就是节点new1,之后是节点new2,一直循环到节点header为止。
评论暂时关闭