数据结构:双向链表
链表的分类
常见的链表分类主要包括单向、双向以及循环结构。理解这些分类有助于根据实际场景选择合适的存储方式。


概念与结构
概念
双向链表通常采用带头结点的设计,这里的'头结点'实际上是一个哨兵位。它不存储有效数据,仅作为链表的固定入口,简化了边界条件的处理(如头插、头删时无需特殊判断空指针)。
注意:哨兵位结点不存储任何有效元素,只是站在这里'放哨的'。
结构定义
在 C 语言中,我们需要定义节点结构和链表操作接口。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
typedef int LTDataType;
typedef struct ListNode {
LTDataType data;
struct ListNode* next; // 指向下一个节点的指针
struct ListNode* prev; // 指向前一个节点的指针
} LTNode;
为了保持接口的统一性和易用性,我们约定所有增删改查操作均基于带头结点的循环双向链表进行。
// 初始化
LTNode* LTInit;
LTNode* ;
;
;
;
;
;
;
LTNode* ;
;
;


