
# 开发指导
#### 功能
Huawei LiteOS的双向链表模块为用户提供下面几种功能，接口详细信息可以查看API参考。
| 功能分类         | 接口名                             | 描述                                                                  |
|:---|:---|:---|
| 初始化链表        | LOS_ListInit                    | 将指定节点初始化为双向链表节点                                                     |
| 初始化链表        | LOS_DL_LIST_HEAD                | 定义一个节点并初始化为双向链表节点                                                   |
| 增加节点         | LOS_ListAdd                     | 将指定节点插入到双向链表头端                                                      |
| 增加节点         | LOS_ListHeadInsert              | 将指定节点插入到双向链表头端，同LOS_ListAdd                                         |
| 增加节点         | LOS_ListTailInsert              | 将指定节点插入到双向链表尾端                                                      |
| 删除节点         | LOS_ListDelete                  | 将指定节点从链表中删除                                                         |
| 删除节点         | LOS_ListDelInit                 | 将指定节点从链表中删除，并使用该节点初始化链表                                             |
| 判断双向链表是否为空   | LOS_ListEmpty                   | 判断链表是否为空                                                            |
| 获取节点         | LOS_DL_LIST_LAST                | 获取指定节点的前驱结点                                                         |
| 获取节点         | LOS_DL_LIST_FIRST               | 获取指定节点的后继结点                                                         |
| 获取结构体信息      | LOS_DL_LIST_ENTRY               | 获取包含链表的结构体地址，接口的第一个入参表示的是链表中的某个节点，第二个入参是要获取的结构体名称，第三个入参是链表在该结构体中的名称 |
| 获取结构体信息      | LOS_OFF_SET_OF                  | 获取指定结构体内的成员相对于结构体起始地址的偏移量                                           |
| 遍历双向链表       | LOS_DL_LIST_FOR_EACH            | 遍历双向链表                                                              |
| 遍历双向链表       | LOS_DL_LIST_FOR_EACH_SAFE       | 遍历双向链表，并存储当前节点的后继节点用于安全校验                                           |
| 遍历包含双向链表的结构体 | LOS_DL_LIST_FOR_EACH_ENTRY      | 遍历指定双向链表，获取包含该链表节点的结构体地址                                            |
| 遍历包含双向链表的结构体 | LOS_DL_LIST_FOR_EACH_ENTRY_SAFE | 遍历指定双向链表，获取包含该链表节点的结构体地址，并存储包含当前节点的后继节点的结构体地址                       |
| 遍历包含双向链表的结构体 | LOS_DL_LIST_FOR_EACH_ENTRY_HOOK | 遍历指定双向链表，获取包含该链表节点的结构体地址，并在每次循环中调用钩子函数                              |
   
#### 开发流程
双向链表的典型开发流程：
1. 调用LOS_ListInit/LOS_DL_LIST_HEAD初始双向链表。
2. 调用LOS_ListAdd/LOS_ListHeadInsert向链表头部插入节点。
3. 调用LOS_ListTailInsert向链表尾部插入节点。
4. 调用LOS_ListDelete删除指定节点。
5. 调用LOS_ListEmpty判断链表是否为空。
6. 调用LOS_ListDelInit删除指定节点并以此节点初始化链表。
 
