list
list 模块提供双向链表容器,支持链表节点的插入、删除与遍历操作。
Class Summary
OHOS::List
双向链表模板类,实现双向链表数据结构,提供添加、删除、插入、清空、弹出和获取链表大小等基本功能
- 构造:无
-
成员函数:
接口名称 功能简述 Front 获取链表头节点数据 Back 获取链表尾节点数据 PushBack 在链表末尾插入数据 PushFront 在链表头部插入数据 PopBack 弹出链表末尾数据 PopFront 弹出链表头部数据 Insert 在指定节点前插入数据 Remove 删除指定数据节点 Clear 删除链表中所有节点 Head 获取链表头节点地址 Tail 获取链表尾节点地址 Begin 获取链表起始节点地址 End 获取链表结束节点地址 Next 获取指定节点的下一个节点地址 IsEmpty 判断链表是否为空 Size 获取链表大小 -
使用包含头文件:
#include "gfx_utils/list.h" - 声明头文件:
middleware/services/gui/uikit/utils/interfaces/kits/gfx_utils/list.h - 公有运算符:无
- 继承关系:HeapBase
- 嵌套类型:无
- 模板形参:
typename T(链表存储的数据类型)
Functions
OHOS::List
Front
const T Front() const
功能说明
- 核心用途:获取双向链表头节点所存储的数据
- 使用场景:需要读取链表首个元素值时调用
- 调用者需确保链表非空,否则行为未定义
返回值
- 返回类型:
const T
返回链表头节点数据
| 返回值 | 触发场景 |
|---|---|
| 头节点数据 | 链表非空时返回首节点存储的数据 |
Back
const T Back() const
功能说明
- 核心用途:获取双向链表尾节点所存储的数据
- 使用场景:需要读取链表末尾元素值时调用
- 调用者需确保链表非空,否则行为未定义
返回值
- 返回类型:
const T
返回链表尾节点数据
| 返回值 | 触发场景 |
|---|---|
| 尾节点数据 | 链表非空时返回末尾节点存储的数据 |
PushBack
void PushBack(T data)
功能说明
- 核心用途:在双向链表末尾插入一个新节点,存储指定数据
- 使用场景:向链表尾部追加数据时调用
- 插入后链表大小自增 1
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| data | T | 待插入的数据 | 由模板类型 T 决定 |
PushFront
void PushFront(T data)
功能说明
- 核心用途:在双向链表头部插入一个新节点,存储指定数据
- 使用场景:向链表头部插入数据时调用
- 插入后链表大小自增 1
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| data | T | 待插入的数据 | 由模板类型 T 决定 |
PopBack
void PopBack()
功能说明
- 核心用途:弹出双向链表末尾节点并释放其内存
- 使用场景:移除链表尾部元素时调用
- 链表为空时调用不执行任何操作;弹出后链表大小自减 1
PopFront
void PopFront()
功能说明
- 核心用途:弹出双向链表头部节点并释放其内存
- 使用场景:移除链表头部元素时调用
- 链表为空时调用不执行任何操作;弹出后链表大小自减 1
Insert
void Insert(ListNode<T>* node, T data)
功能说明
- 核心用途:在指定节点前插入一个新节点,存储指定数据
- 使用场景:需要在链表中间位置插入数据时调用
- 插入后链表大小自增 1
前置条件
- 入参
node不为 nullptr,且node->prev_不为 nullptr node必须为当前链表中的有效节点
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| node | ListNode |
指向链表中待插入位置的后继节点 | 不为 nullptr,且 node->prev_ 不为 nullptr |
| data | T | 待插入的数据 | 由模板类型 T 决定 |
Remove
ListNode<T>* Remove(ListNode<T>* node)
功能说明
- 核心用途:删除链表中指定节点并释放其内存
- 使用场景:移除链表中指定元素时调用
- 删除后链表大小自减 1
前置条件
- 链表不为空
- 入参
node不为 nullptr,且node->prev_和node->next_均不为 nullptr
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| node | ListNode |
指向待删除的链表节点 | 不为 nullptr,且 prev_/next_ 不为 nullptr |
返回值
- 返回类型:
ListNode<T>*
返回被删除节点的下一个节点地址
| 返回值 | 触发场景 |
|---|---|
| next 指针 | 成功删除节点,返回被删除节点的后继节点地址 |
| &head_ | 链表为空或入参无效时返回哨兵头节点地址 |
Clear
void Clear()
功能说明
- 核心用途:删除双向链表中所有节点并释放内存
- 使用场景:清空链表全部元素时调用
- 清空后链表大小重置为 0
Head
ListNode<T>* Head() const
功能说明
- 核心用途:获取双向链表头节点地址
- 使用场景:需要从链表头部开始遍历时调用
- 返回第一个有效数据节点的地址
返回值
- 返回类型:
ListNode<T>*
返回链表头节点地址
| 返回值 | 触发场景 |
|---|---|
| 头节点地址 | 返回链表第一个数据节点的指针 |
Tail
ListNode<T>* Tail() const
功能说明
- 核心用途:获取双向链表尾节点地址
- 使用场景:需要从链表尾部访问数据时调用
- 返回最后一个有效数据节点的地址
返回值
- 返回类型:
ListNode<T>*
返回链表尾节点地址
| 返回值 | 触发场景 |
|---|---|
| 尾节点地址 | 返回链表最后一个数据节点的指针 |
Begin
ListNode<T>* Begin() const
功能说明
- 核心用途:获取双向链表起始节点地址,用于正向遍历
- 使用场景:作为迭代器起点遍历链表时调用
- 返回第一个有效数据节点的地址
返回值
- 返回类型:
ListNode<T>*
返回链表起始节点地址
| 返回值 | 触发场景 |
|---|---|
| 起始节点地址 | 返回链表第一个数据节点的指针 |
End
const ListNode<T>* End() const
功能说明
- 核心用途:获取双向链表结束节点地址,用于遍历终止判断
- 使用场景:作为迭代器终止标志遍历链表时调用
- 返回哨兵头节点地址,表示遍历结束位置
返回值
- 返回类型:
const ListNode<T>*
返回链表结束节点地址
| 返回值 | 触发场景 |
|---|---|
| 哨兵头节点地址 | 返回链表内部哨兵节点的指针,表示遍历终止位置 |
Next
ListNode<T>* Next(const ListNode<T>* node) const
功能说明
- 核心用途:获取指定节点的下一个节点地址
- 使用场景:正向遍历链表时获取后继节点
- 入参为 nullptr 时返回 nullptr
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| node | const ListNode |
指向当前链表数据节点的指针 | 可为 nullptr |
返回值
- 返回类型:
ListNode<T>*
返回指定节点的下一个节点地址
| 返回值 | 触发场景 |
|---|---|
| 下一节点地址 | node 不为 nullptr 时返回后继节点指针 |
| nullptr | node 为 nullptr 时返回空指针 |
IsEmpty
bool IsEmpty() const
功能说明
- 核心用途:判断双向链表是否为空
- 使用场景:在执行弹出、删除等操作前检查链表状态
- 不修改对象状态(const 成员函数)
返回值
- 返回类型:
bool
返回链表是否为空
| 返回值 | 触发场景 |
|---|---|
| true | 链表为空 |
| false | 链表非空 |
Size
uint16_t Size() const
功能说明
- 核心用途:获取双向链表的大小(节点数量)
- 使用场景:需要获知链表元素个数时调用
- 不修改对象状态(const 成员函数)
返回值
- 返回类型:
uint16_t
返回链表大小
| 返回值 | 触发场景 |
|---|---|
| 0 | 链表为空 |
| 1~65535 | 链表中的节点数量 |
Structures
ListNode
template<typename T>
class ListNode : public HeapBase {
public:
ListNode<T>* prev_;
ListNode<T>* next_;
T data_;
};
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| prev_ | ListNode |
指向前驱节点的指针 |
| next_ | ListNode |
指向后继节点的指针 |
| data_ | T | 节点存储的数据 |