单向链表
**单向链表(Singly Linked List)**是最基础的链表形态:每个结点只有一个 next 指针,指向后继;最后一个结点的 next 为 NULL。
结点不必连续存放;在已知位置处插入、删除往往不必像数组那样搬移大量元素。
本文解决什么问题
- 结点结构与头指针的含义
- 头插、尾插、按位插入 / 删除怎么写
- 常见指针错误如何避免
- 和顺序表、C++ 标准库如何对照
结点长什么样
[ data | next ] -> [ data | next ] -> [ data | next ] -> NULL
typedef struct Node {
int data;
struct Node *next;
} Node;
通常用 Node *head 指向第一个结点;空表时 head == NULL。有的实现会加头结点(哨兵),让空表与非空表的插入删除更统一——本篇先用「无头结点」写法,更直观。
特点
| 操作 | 平均时间 | 说明 |
|---|---|---|
| 头插 / 头删 | 改几个指针 | |
| 访问第 个 | 不能随机访问 | |