双向循环链表
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;
}
前半部:next->prev = _new; //prev ...... ...... new <---prev--- next
_new->next = next; //prev ...... ...... new ----next---> next
后半部:_new->prev = prev; //prev <---prev--- new ...... ...... next
prev->next = _new; //prev ----next---> new ...... ...... next
如果是双向列表而不循环,如贪吃蛇那种,直接添加head如下:
next->prev = _new; //head->prev = _new;
_new->next = next; //_new->next = head;
next = _new; //head = _new;