list_add_tail 添加双向链表结点讲解
来源:互联网 发布:数据化工具 编辑:程序博客网 时间:2024/05/24 03:25
我是在看linux 的input subsystem 的时候,用到的这个函数,当时我对链表还不怎么清楚
struct list_head {
struct list_head *next, *prev;
};
list_add_tail(&dev->node, &input_dev_list);
/*** list_add_tail - add a new entry
* @new: new entry to be added
* @head: list head to add it before
*
* Insert a new entry before the specified head.
* This is useful for implementing queues.
*/
static __inline__ void list_add_tail(struct list_head *_new, struct list_head *head)
{
__list_add(_new, head->prev, head);
}
/*
* 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的节点
- list_add_tail 添加双向链表结点讲解
- list_add_tail 双向链表实现分析 .
- list_add_tail 双向链表实现分析
- Java双向链表的创建结点,清空链表,添加结点,删除结点
- list_add_tail()
- list_add_tail
- list_add_tail()
- list_add_tail()
- 双向+头结点+循环的链表
- 带头结点的双向循环链表
- 双向链表结点的插入
- 带头结点的双向循环链表
- 双向循环链表(带头结点)
- 插入结点(双向链表)
- 删除结点 (双向链表)
- 双向链表(不带头结点)
- 成对交换双向链表中的结点
- 带有头结点的双向链表
- 使用UIPickerView需要注意的问题时候
- IE8上传文件时javascript取文件的真实路径的问题("C:\fakepath\xxxxx )
- Linux Qt编程——在程序中启动其他应用、脚本
- 【C++ STL】细数C++ STL 的那些事---map容器
- Java学习第四天
- list_add_tail 添加双向链表结点讲解
- 临界区域问题
- CSDN 上的广告越来越多了
- Android自定义控件之组合控件
- 配置,链接access数据库
- AfxMessageBox
- .aspx页面弹框
- OpenGL---GLUT教程(九) GLUT鼠标
- php字符串之间多空格,采用特殊字符分离