我是在看linux 的input subsystem 的时候,用到的这个函数,当时我对链表还不怎么清楚
struct list_head {
struct list_head *next, *prev;
};
list_add_tail(&dev->node, &input_dev_list);
/**/*
* Insert a new entry between two known consecutive entries.
*
* This is only for internal list manipulation where we know
* the prev/next entries already!
*/
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;
}
其实这个函数完成的功能就是添加一个新的结点在head的左边,我接下来,详解讲解添加的过程
开始的时候,我们只知道有一个一个头节点,struct list_head *head,然后将next->prev = _new;
_new->next = next;这就是将new节点添加到head 节点的左边,那么接 _new->prev = prev;
prev->next = _new这两个是什么意思呢??/
因为开始head->pre->next是指向head的,因为现在添加了一个新的节点了,而且是在左边添加的,所以现在就需要将head->pre->next指向新的节点,而将新的节点的pre,也就是new->pre指向以前指向head的节点