单链表 
data structure
定义 
线性表的链式存储又称单链表,它是只通过一组任意的存储单元来存储线性表的数据元素。为建立数据元素之间的线性关系,每个链表节点除了存放元素自身的信息外,还需要存放指向其后继的指针。
cpp
typedef struct Node{
  ElementType data;    // 数据域,存放数据
  struct Node *next;   // 指针域,存放其后继节点的地址
}LNode;typedef struct Node{
  ElementType data;    // 数据域,存放数据
  struct Node *next;   // 指针域,存放其后继节点的地址
}LNode;头指针和头结点的区别 
不管带不带头节点,头指针始终指向链表的第一个节点,而头结点是带头结点的链表中的第一个节点,节点数据域通常不存储信息。 头结点的有点:
- 由于第一个数据节点的位置被存放在头结点的指针域中,云次在链表的第一个位置上的操作和在表的其他位置操作一致,无需进行特殊处理。
 - 无论链表是否为空,其头指针都指向头结点的非空指针(空表中头结点的指针域为空),因此空表和非空表的处理也得到了统一。
 
链表基本操作 
cpp
InitLinkList(&L);                // 初始化链表
BeforeHeader(&L, data);          // 头插法
AfterHeader(&L, data);           // 尾插法
BeforeInsert(p, data);           // p 节点之前插入
AfterInsert(p, data);            // p 节点之后插入
BeforeDelete(p, &data);          // 删除 p 节点之前节点
AfterDelete(p, &data);           // 删除 p 节点之后节点
...InitLinkList(&L);                // 初始化链表
BeforeHeader(&L, data);          // 头插法
AfterHeader(&L, data);           // 尾插法
BeforeInsert(p, data);           // p 节点之前插入
AfterInsert(p, data);            // p 节点之后插入
BeforeDelete(p, &data);          // 删除 p 节点之前节点
AfterDelete(p, &data);           // 删除 p 节点之后节点
...