常见数据结构经典 LeetCode 题目推荐
约 2095 字大约 7 分钟
刷数据结构题,不建议只按难度从 Easy 刷到 Hard。更稳的方式是按结构建立题型:数组看下标和区间,链表看指针,栈队列看顺序约束,树图看遍历,堆看优先级,哈希表看快速定位。
下面的题单控制在面试高频和模板代表题范围内。每类先做“必刷题”,再做“进阶题”。题目做完后,至少写下复杂度、边界样例和这题属于哪个模板。
怎么用这份题单
数据结构题不要只记结论。每刷一类题,先回到对应结构看一次“存储方式、核心操作、复杂度”,再动手写题。这样面试官追问 Java 集合、Redis、MySQL 索引或缓存场景时,答案不会只停在题解层面。
| 结构 | 先读什么 | 刷题时重点看什么 |
|---|---|---|
| 数组、链表、栈队列 | 线性数据结构详解、双指针与滑动窗口 | 下标、指针更新、入栈出栈时机 |
| 哈希表 | 哈希表面试题总结 | key 的设计、计数时机、冲突和扩容 |
| 树和图 | 树结构详解、图详解、DFS 与 BFS | 递归返回值、访问标记、BFS 层数统计 |
| 堆和 Top K | 堆详解、Top K 问题面试题总结 | 堆大小、比较器、数据流场景 |
| Trie 和并查集 | Trie 前缀树面试题总结、并查集面试题总结 | 节点结构、结束标记、路径压缩、连通判断 |
| LRU | LRU 缓存面试题总结 | 哈希表和双向链表如何保持 O(1) |
数组
| 题型 | 必刷题 | 进阶题 | 面试价值 | 复盘重点 |
|---|---|---|---|---|
| 二分查找 | 704. 二分查找 | 34. 在排序数组中查找元素的第一个和最后一个位置 | 考循环条件和边界 | left <= right、左右边界更新 |
| 原地修改 | 26. 删除有序数组中的重复项 | 80. 删除有序数组中的重复项 II | 考双指针写法 | 慢指针含义、覆盖时机 |
| 双指针 | 977. 有序数组的平方 | 15. 三数之和 | 高频数组题 | 排序后去重、左右指针移动 |
| 前缀和 | 303. 区域和检索 - 数组不可变 | 560. 和为 K 的子数组 | 子数组题入口 | 前缀和含义、哈希表计数 |
链表
| 题型 | 必刷题 | 进阶题 | 面试价值 | 复盘重点 |
|---|---|---|---|---|
| 基础操作 | 707. 设计链表 | 24. 两两交换链表中的节点 | 考节点操作基本功 | 虚拟头节点、插入删除顺序 |
| 链表反转 | 206. 反转链表 | 92. 反转链表 II | 高频手写题 | prev、cur、next 的更新顺序 |
| 快慢指针 | 141. 环形链表 | 142. 环形链表 II | 常见追问题 | 相遇点和入环点推导 |
| 删除节点 | 19. 删除链表的倒数第 N 个结点 | 61. 旋转链表 | 考边界处理 | 链表长度、头节点被删 |
栈与队列
| 题型 | 必刷题 | 进阶题 | 面试价值 | 复盘重点 |
|---|---|---|---|---|
| 结构模拟 | 232. 用栈实现队列 | 225. 用队列实现栈 | 考结构理解 | 入队栈、出队栈职责 |
| 括号匹配 | 20. 有效的括号 | 394. 字符串解码 | 字符串栈题入口 | 什么时候入栈、什么时候弹栈 |
| 单调栈 | 739. 每日温度 | 84. 柱状图中最大的矩形 | 中高频题型 | 栈中维护递增还是递减 |
| 单调队列 | 239. 滑动窗口最大值 | 862. 和至少为 K 的最短子数组 | Hard 题常见模板 | 队首过期、队尾维护单调性 |
哈希表
| 题型 | 必刷题 | 进阶题 | 面试价值 | 复盘重点 |
|---|---|---|---|---|
| 快速查找 | 1. 两数之和 | 49. 字母异位词分组 | 哈希表入门 | key 的设计 |
| 计数 | 242. 有效的字母异位词 | 347. 前 K 个高频元素 | 高频统计题 | 数组计数和 Map 计数怎么选 |
| 前缀和 + 哈希 | 560. 和为 K 的子数组 | 974. 和可被 K 整除的子数组 | 子数组题常考 | 先查再加,避免把当前前缀算进去 |
| 缓存结构 | 146. LRU 缓存 | 460. LFU 缓存 | 手写设计题 | 哈希表和双向链表协作 |
二叉树
| 题型 | 必刷题 | 进阶题 | 面试价值 | 复盘重点 |
|---|---|---|---|---|
| 遍历 | 144. 二叉树的前序遍历 | 102. 二叉树的层序遍历 | 树题基础 | 递归边界、队列层数 |
| 路径问题 | 112. 路径总和 | 124. 二叉树中的最大路径和 | DFS 高频 | 返回值和全局答案分开 |
| 构造树 | 105. 从前序与中序遍历序列构造二叉树 | 106. 从中序与后序遍历序列构造二叉树 | 考递归区间 | 下标范围别写乱 |
| 最近公共祖先 | 236. 二叉树的最近公共祖先 | 235. 二叉搜索树的最近公共祖先 | 高频追问 | 普通树和 BST 的解法差异 |
图
| 题型 | 必刷题 | 进阶题 | 面试价值 | 复盘重点 |
|---|---|---|---|---|
| 网格 DFS/BFS | 200. 岛屿数量 | 695. 岛屿的最大面积 | 图搜索入门 | 越界、访问标记 |
| 拓扑排序 | 207. 课程表 | 210. 课程表 II | 依赖关系题 | 入度数组、队列 |
| 最短路径 | 994. 腐烂的橘子 | 127. 单词接龙 | BFS 层序应用 | 每层步数统计 |
| 连通性 | 547. 省份数量 | 684. 冗余连接 | 并查集入口 | find 和 union 模板 |
堆
| 题型 | 必刷题 | 进阶题 | 面试价值 | 复盘重点 |
|---|---|---|---|---|
| 第 K 大 | 215. 数组中的第 K 个最大元素 | 703. 数据流中的第 K 大元素 | Top K 高频 | 小顶堆大小保持为 K |
| 频率统计 | 347. 前 K 个高频元素 | 692. 前 K 个高频单词 | 哈希表 + 堆 | 比较器写法 |
| 双堆 | 295. 数据流的中位数 | 480. 滑动窗口中位数 | 进阶设计题 | 大顶堆和小顶堆平衡 |
Trie 与并查集
| 结构 | 必刷题 | 进阶题 | 面试价值 | 复盘重点 |
|---|---|---|---|---|
| Trie | 208. 实现 Trie | 211. 添加与搜索单词 | 字符串集合题 | 节点结构、结束标记 |
| Trie + DFS | 212. 单词搜索 II | 648. 单词替换 | 中高频题 | 前缀剪枝 |
| 并查集 | 547. 省份数量 | 1319. 连通网络的操作次数 | 连通性模板 | 路径压缩 |
| 并查集判环 | 684. 冗余连接 | 990. 等式方程的可满足性 | 图题常见变体 | 先合并等式,再检查冲突 |
复习路线入口
这篇文章只保留数据结构相关题单。7 天复习路线和 30 天复习路线统一维护在数据结构复习总览,避免题单文章和总览页重复维护同一套计划。
写在最后
如果内容对你有帮助的话,欢迎顺手给 JavaGuide 点一个免费的 Star 支持一下:GitHub | Gitee。
JavaGuide 已持续维护近七年,累计 6100+ 次提交,来自 620+ 位贡献者共同完善。你的 Star、反馈和 PR,都是这个项目继续更新的动力。
如果你正在准备后端/AI 应用开发面试,也可以了解一下我的知识星球,里面包括后端和 AI 实战项目、简历优化、一对一提问和高频考点资料,已经持续维护六年。
