

核心概念与结构
概念
双向链表中的每个节点都包含两个指针,分别指向前驱和后继。这里需要特别注意'带头'的概念:在双向链表中,我们通常设置一个不存储有效数据的'哨兵位'作为头结点。它不参与实际数据存储,主要作用是简化边界处理,避免对头节点进行特殊判断。
结构定义
首先定义节点结构和数据类型。注意 prev 和 next 的指向关系。
// 定义双向链表结构
typedef int LTDataType;
struct ListNode {
LTDataType data;
struct ListNode* next; // 指向下一个节点的指针
struct ListNode* prev; // 指向前一个节点的指针
} LTNode;
接下来是接口声明。为了保持接口的一致性,初始化函数返回头指针,销毁函数也返回空指针以便接收。
// 初始化
LTNode* LTInit();
// 销毁
LTNode* LTDestroy(LTNode* phead);
// 尾插 / 头插
void LTPushBack(LTNode* phead, LTDataType x);
void LTPushFront(LTNode* phead, LTDataType x);
// 尾删 / 头删
void LTPopBack;
;
;
;
LTNode* ;
;
;


