🧊 算法积木:单链表中的「差值对齐」(Gap Alignment)

25 阅读1分钟

1. 物理模型 (The Physics)

  • 定义差值对齐是线性遍历系统中的 “相位补偿机制” 。在无法进行随机访问(Random Access)的单向通道中,通过让长距离者“先行消耗”掉多余的路径长度,从而使多个指针在剩余距离上达到“同一起跑线”。

  • 适用场域

    • 物理约束单向链表 (Singly Linked List)
    • 典型场景
      1. 寻找两个不同长度链表的交点(LeetCode 160)。
      2. 寻找链表的倒数第 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)组合使用。先用【差值对齐】抹平差距,再用【同步遍历】寻找共性。