| 特性/操作 | 单链表 (Singly Linked List) | 双链表 (Doubly Linked List) | 循环链表 (Circular Linked List) |
|---|---|---|---|
| 节点结构 | 数据 + 指向下一个节点指针 | 数据 + 指向前一个节点指针 + 指向下一个节点指针 | 数据 + 指向下一个节点指针 |
| 头指针 | 指向第一个节点 | 指向第一个节点 | 指向第一个节点 |
| 遍历方向 | 单向遍历 | 双向遍历 | 从头节点开始,循环遍历 |
| 插入操作 | 在头部或尾部插入 | 在头部或尾部插入 | 在尾部插入,指向头节点 |
| 删除操作 | 需要找到前一个节点 | 直接访问前后节点 | 需调整指针保持循环结构 |
| 内存管理 | 节点删除需手动管理 | 节点删除需手动管理 | 节点删除需手动管理 |
| 应用场景 | 动态数据存储,栈 | 浏览器前进后退功能,音乐播放器 | 游戏回合制,任务调度 |
| 优缺点 | - 内存利用高 - 插入/删除简单 - 难以逆向遍历 |
- 支持双向遍历 - 删除操作方便 - 内存开销大 |
- 节省空间 - 循环结构适合循环任务 - 删除操作需注意循环 |
操作示例
| 操作 | 单链表例子 | 双链表例子 | 循环链表示例 |
|---|---|---|---|
| 插入 | insert(30)头部: 30 -> 10 -> 20 |
insert(30)头部: 30 <-> 10 <-> 20 |
insert(30)尾部: 10 -> 20 -> 30 -> 头 |
| 删除 | remove(10)结果: 20 |
remove(20)结果: 10 <-> 30 |
remove(10)结果: 20 -> 30 -> 头 |
一、单链表(Singly Linked List)
1. 定义
单链表是一种线性数据结构,由一系列节点构成。每个节点包含数据部分和指向下一个节点的指针,最后一个节点的指针指向 nullptr。
2. 原理
- 节点结构:每个节点包含数据和指向下一个节点的指针。
- 头指针:链表的起始点,通过它访问其他节点。
3. 操作
- 插入:在链表头部或尾部插入新节点。
- 删除:根据值删除节点,需调整指针。
- 遍历:从头节点开始,依次访问每个节点。
4. 应用场景
- 动态数据存储(如购物车)。
- 实现栈(后进先出)。
5. 示例代码
#include <iostream>
struct Node {
int data; // 节点数据
Node* next; // 指向下一个节点的指针
};
class SinglyLinkedList {
private:
Node* head; // 链表头指针
public:
SinglyLinkedList() : head(nullptr) {} // 初始化头指针
~SinglyLinkedList(); // 析构函数
void insert(int value); // 插入节点
&

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



