寻找重复数:二分查找与快慢指针(不修改数组、O(1) 空间)
给定 n+1 个取值范围在 [1,n] 的整数,找出唯一的重复数,且不修改数组、只用 O(1) 额外空间。分别用值域二分与 Floyd 判圈(快慢指针)两种思路求解,附 C / C++ / JavaScript 三语言实现。
2486 字
|
12 分钟
单链表反转:迭代与递归全解析(整个 / 前 N 个 / 区间 / K 个一组)
系统掌握单链表反转的迭代与递归两种解法,并用两种思路分别解决反转整个链表、反转前 N 个节点、区间反转、K 个一组反转四个经典问题,附 C / C++ / JavaScript 三语言实现。
3168 字
|
16 分钟
判断单链表环并找出环起点:Floyd 判圈算法
先用快慢指针判断链表是否有环,若有环则通过等速回找法定位环的入口节点。两道经典题的合并:Floyd 判圈 + 环起点的数学证明。附带 C / C++ / JavaScript 三语言实现。
1297 字
|
6 分钟
判断两个单链表是否相交并找出交点:双指针交替遍历法
判断两条单链表是否相交,若相交则找出交点。使用双指针交替遍历法:pA 走到末尾后跳到 pB 的头,pB 走到末尾后跳到 pA 的头,两指针最终相遇于交点或同归于 null。附带 C / C++ / JavaScript 三语言实现。
1231 字
|
6 分钟
寻找单链表的倒数第 K 个节点:双指针间隔法
只遍历一次就找到单链表倒数第 K 个节点。使用双指针技巧:fast 先走 K 步,然后 slow 和 fast 同步前进,fast 到末尾时 slow 恰在目标位置。附带 C / C++ / JavaScript 三语言实现。
1013 字
|
5 分钟
合并 K 个有序链表:最小堆与分治法
将 K 个升序链表合并为一个新的升序链表。介绍两种解法:最小堆(优先队列)和分治法两两合并,分析各自优劣。附带 C / C++ / JavaScript 三语言实现。
1630 字
|
8 分钟
合并两个有序链表:双指针与 Dummy 节点
将两个升序链表合并为一个新的升序链表。使用双指针逐个比较节点值,dummy 虚拟头节点统一处理边界情况。附带 C / C++ / JavaScript 三语言实现。
1016 字
|
5 分钟
寻找单链表的中点:快慢指针经典应用
使用快慢指针技巧一次遍历找到单链表的中间节点。slow 每次走一步,fast 每次走两步,fast 到终点时 slow 恰在中点。附带 C / C++ / JavaScript 三语言实现。
1020 字
|
5 分钟