1. 物理模型 (The Physics)
-
定义: 差值对齐是线性遍历系统中的 “相位补偿机制” 。在无法进行随机访问(Random Access)的单向通道中,通过让长距离者“先行消耗”掉多余的路径长度,从而使多个指针在剩余距离上达到“同一起跑线”。
-
适用场域:
- 物理约束:单向链表 (Singly Linked List)。
- 典型场景:
- 寻找两个不同长度链表的交点(LeetCode 160)。
- 寻找链表的倒数第 K 个节点(让前驱指针先行 K 步,本质是让两个指针保持 K 的相位差)。
2. 核心范式 (The Schema)
在工程实践中,这通常作为一个Helper Function存在,用于预处理指针状态。
/**
* 积木名称:差值对齐器 (Gap Aligner)
*
* @desc 让指针 node 先向前移动 delta 步
* @param node 起始节点
* @param delta 需要消除的距离差 (必须 >= 0)
* @returns 移动后的新位置 (如果 delta 超出长度,可能返回 null)
*/
function advancePointer<T>(node: T | null, delta: number): T | null {
// 接口约束:T 必须具备 .next 属性(通常是 ListNode)
let current = node;
// Invariant: 只要还有步数没走完,且路还没断,就继续走
while (delta > 0 && current !== null) {
// @ts-ignore: 假设 T 拥有 next 属性
current = current.next;
delta--;
}
// 边界思考:如果 current 变为 null,说明 delta > 链表剩余长度
// 此时返回 null 是符合物理预期的(跑出界了)
return current;
}
3. 备注
- 鲁棒性警示:使用此积木时,最大的风险点在于 delta 大于链表实际长度。在工程实现中,必须检查返回值是否为 null。
- 组合技:此积木常与 “同步遍历”(Two Pointers Sync March)组合使用。先用【差值对齐】抹平差距,再用【同步遍历】寻找共性。