05内核链表
五、内核链表
1、使用方法
链表结构体
1 | typedef int DataType; |
1、初始化链表
1 | // 初始化链表 |
2、创建节点
1 | // 创建节点 |
3、遍历
1 | // 遍历 |
4、添加节点
4.1头插
1 | // 将新节点new插入到以head为首的链表的开头 |
4.2尾插
1 | // 将新节点new插入到以head为首的链表的末尾 |
5、删除节点
5.1 list_for_each_safe版本
1 | // 删除节点 |
5.2 list_for_each_entry_safe版本
1 | // 删除节点 |
6、更新节点
1 | // 更新节点 |
7、查找节点
1 | // 查找节点(根据数据查找) |
2、kernel_list.h
内核小结构体
1 | // 内核标准链表:小结构体 |
1、初始化小结构体
1 | // 初始化小结构体,让其自己形成一个双向循环 |
2、头插
1 | // 将新节点new插入到以head为首的链表的开头 |
3、尾插
1 | // 将新节点new插入到以head为首的链表的末尾 |
4、删除节点
1 | // 将entry指向的节点,从链表中剔除出去 |
5、判断是否为空
1 | //判断链表是否为空 |
6、小结构体指针转大结构体
1 | // 小结构体指针ptr转换成大结构体指针p: p = list_entry(ptr, type, member) |
7、向后遍历(遍历过程中,不可以将节点删除)
1 | /** |
8、向前遍历
1 | /** |
9、从头开始往后遍历链表(遍历过程中,可以将节点删除)
9.1删除节点安全版本(手动转换)
1 | /** |
9.2删除节点安全版本(自动转换)
1 | /** |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.