数据结构-单链表

一、基本定义

单链表是链式存储的线性表,由若干节点组成,每个节点包含 数据域(存储元素值)和 指针域(存储下一个节点的地址);链表最后一个节点的指针域为 null,还可设置头节点(不存数据,方便操作)或头指针(指向第一个节点)。

二、核心特点

  1. 物理存储上非连续、非顺序,节点通过指针连接。

  2. 不支持随机访问,访问第 i 个节点需从表头遍历,时间复杂度 O(n)。

  3. 增删操作无需移动元素,只需修改指针指向,时间复杂度 O(1)(已知操作节点的前驱节点)。

  4. 相比顺序表,空间开销更大(需额外存储指针)。

三、核心操作(Java 伪代码思路)

  1. 节点类定义

class Node {

int data; // 数据域

Node next; // 指针域

public Node(int data) {

this.data = data;

this.next = null;

}

}

  1. 基础操作

• 遍历:从头节点开始,循环访问每个节点直到 next 为 null。

• 插入(指定位置):找到插入位置的前驱节点,将新节点 next 指向后继节点,再将前驱节点 next 指向新节点。

• 删除(指定节点):找到待删节点的前驱节点,将其 next 指向待删节点的后继节点,释放待删节点空间。

• 查找:遍历链表,对比节点数据域与目标值,找到则返回节点,否则返回 null。

四、常见问题与优化

  1. 空指针异常:操作前需判断头节点、当前节点、next 指针是否为 null。

  2. 头节点处理:添加头节点可统一空链表和非空链表的操作逻辑,无需单独判断。

  3. 快慢指针应用:可用于判断链表是否有环、找链表中间节点等场景。

相关推荐
Suxing93 小时前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法
LuminousCPP3 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
逆境不可逃4 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
c238564 小时前
《算法武林谱:四大排序神功与二分寻宝术全解》
数据结构·算法·排序算法
OpenApi.cc4 小时前
MoCode — AI Agent Server (Docker) + macOS Desktop Client(开源项目)
数据结构·人工智能·深度学习·神经网络
Mem0rin4 小时前
二分查找:左右边界
数据结构·算法
lazily-c5 小时前
数据结构模板
数据结构
祖力5513 小时前
数据结构的基本概念与单向链表(链表数据类型构造、创建、头插、尾插、头删、尾删)
数据结构·链表
白狐_79816 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25816 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法