type
Post
status
Published
date
Mar 13, 2026
slug
Lc_2
summary
tags
数据结构
算法
category
数据结构与算法
icon
password
链表
E160.相交链表
给你两个单链表的头节点
headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交,题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
示例:

核心思路
代码
E206.反转链表
给你单链表的头节点
head ,请你反转链表,并返回反转后的链表。示例:

核心思路
代码
回文链表
给你一个单链表的头节点
head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例:

核心思路
方法一:链表转化为数组
【方法二】
代码
E141.环形链表
给你一个链表的头节点
head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪
next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回
true 。 否则,返回 false 。示例:

核心思路
代码
E21.合并有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:

核心思路
代码
M142.环形链表II
给定一个链表的头节点
head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪
next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。
示例:

核心思路
代码
M2.两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:

核心思路
代码
删除链表的倒数第 N 个节点
给你一个链表,删除链表的倒数第
n 个结点,并且返回链表的头结点。示例:

核心思路
代码
两两交换链表的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例:

核心思路
代码
排序链表
给你链表的头结点
head ,请将其按 升序 排列并返回 排序后的链表 。示例:

核心思路
代码
M146.LRU缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。
实现
LRUCache 类:LRUCache(int capacity)以 正整数 作为容量capacity初始化 LRU 缓存
int get(int key)如果关键字key存在于缓存中,则返回关键字的值,否则返回1。
void put(int key, int value)如果关键字key已经存在,则变更其数据值value;如果不存在,则向缓存中插入该组key-value。如果插入操作导致关键字数量超过capacity,则应该 逐出 最久未使用的关键字。
函数
get 和 put 必须以 O(1) 的平均时间复杂度运行。示例:
核心思路
代码
二叉树
E94.二叉树的中序遍历
给定一个二叉树的根节点
root ,返回 它的 中序 遍历 。示例:

核心思路
【方法一:递归】
【方法二:栈】
代码
【方法一:递归】
【方法二:栈】
二叉树的最大深度
给定一个二叉树
root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。示例:

核心思路
代码
【方法一:递归】
【方法二:广度优先搜索】
E226.翻转二叉树
给你一棵二叉树的根节点
root ,翻转这棵二叉树,并返回其根节点。示例:

核心思路
代码
【方法一:DFS(递归)】
【方法二:BFS(队列)】
E543.二叉树的直径
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点
root 。
两节点之间路径的 长度 由它们之间边数表示。示例:

核心思路
代码
M108.将有序数组转换为二叉搜索树
给你一个整数数组
nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。平衡二叉树是一种特殊的二叉搜索树,其中任意节点的左右子树高度差不超过1。它可以保证在最坏情况下的查找、插入和删除操作的时间复杂度都是 $O(\log n)$ 级别。 平衡二叉树常用的实现方式有红黑树、AVL树、Treap等。
示例:

核心思路
代码
M102.二叉树的层序遍历
给你二叉树的根节点
root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例:

核心思路
代码
M98.验证二叉搜索树
给你一个二叉树的根节点
root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例:

核心思路
代码
M230.二叉搜索树中第 K 小的元素
给定一个二叉搜索树的根节点
root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。示例:

核心思路
代码
M199.二叉树的右视图
给定一个二叉树的 根节点
root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:

核心思路
代码
M114.二叉树展开为链表
给你二叉树的根结点
root ,请你将它展开为一个单链表:- 展开后的单链表应该同样使用
TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。
- 展开后的单链表应该与二叉树 先序遍历 顺序相同。
示例:

核心思路
代码
M105.从前序与中序遍历序列构造二叉树
给定两个整数数组
preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例:

核心思路
代码
M437.路径总和III
给定一个二叉树的根节点
root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
示例:

核心思路
代码
M236.二叉树最近的公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
示例 1:

核心思路
代码