加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
list.c 1.90 KB
一键复制 编辑 原始数据 按行查看 历史
/*
* list.c
*
* Created on: 2020年2月24日
* Author: wangbing
* Email : mz8023yt@163.com
*/
#ifdef __cplusplus
extern "C" {
#endif
#include "list.h"
#include "stddef.h"
/**
* @brief 初始化链表头
*/
void list_init(struct list_head* head)
{
head->next = head;
head->prev = head;
}
/**
* @brief 内部接口, 添加节点到链表中
*/
void __list_add(struct list_head* new_node, struct list_head* prev_node, struct list_head* next_node)
{
next_node->prev = new_node;
new_node->next = next_node;
new_node->prev = prev_node;
prev_node->next = new_node;
}
/**
* @brief 添加节点到链表头部
*/
void list_add(struct list_head* new_node, struct list_head* head)
{
__list_add(new_node, head, head->next);
}
/**
* @brief 添加节点到链表尾部
*/
void list_add_tail(struct list_head* new_node, struct list_head* head)
{
__list_add(new_node, head->prev, head);
}
/**
* @brief 添加节点到链表特定位置
*/
void list_insert(struct list_head* new_node, struct list_head* prev_node, struct list_head* next_node)
{
__list_add(new_node, prev_node, next_node);
}
/**
* @brief 内部接口, 删除链表中的节点
*/
void __list_del(struct list_head* prev_node, struct list_head* next_node)
{
next_node->prev = prev_node;
prev_node->next = next_node;
}
/**
* @brief 删除链表中的节点
*/
void list_del(struct list_head* node)
{
__list_del(node->prev, node->next);
node->next = NULL;
node->prev = NULL;
}
/**
* @brief 替换链表中的节点
*/
void list_replace(struct list_head* old_node, struct list_head* new_node)
{
new_node->next = old_node->next;
new_node->next->prev = new_node;
new_node->prev = old_node->prev;
new_node->prev->next = new_node;
}
/**
* @brief 判断链表是否为空
*/
int list_is_empty(const struct list_head* head)
{
struct list_head* next = head->next;
return (next == head) && (next == head->prev);
}
#ifdef __cplusplus
}
#endif
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化