当前位置: 首页 > news >正文

LeetCode 相交链表题解:双指针的精妙应用

在刷 LeetCode 链表题的过程中,有一道非常经典的题目——相交链表(Intersection of Two Linked Lists)。今天我们来聊聊这道题目的解法和思想。


题目描述

给你两个单链表 headAheadB,请你找出并返回它们的第一个公共节点。如果两个链表没有交点,返回 null 即可。

⚠️ 注意:题目中所说的「相交」,指的是节点地址相同,而非节点值相同。


思路分析

最直观的做法是暴力遍历或用哈希表记录,但我们今天要介绍的是一种更加优雅的做法:双指针法


解法精髓:双指针

我们用两个指针 AB 分别遍历链表 headAheadB

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode A = headA;
        ListNode B = headB;

        while (A != B) {
            A = A != null ? A.next : headB;
            B = B != null ? B.next : headA;
        }
        return A;
    }
}

思维过程详解

  • 两个指针开始分别走各自的链表;

  • 当其中一个到达链表尾部时,跳到另一个链表的头部继续走;

  • 如果两个链表有交点,最终它们会在交点相遇;

  • 如果没有交点,两个指针都会在走完 A + B 长度之后同时为 null,跳出循环。

这种方式其实是用时间换空间让两个指针走了相同的路径长度


举个例子

假设链表如下:

List A: 4 → 1 → 8 → 4 → 5
List B:     5 → 0 → 1 → 8 → 4 → 5

两个链表在节点值为 8 的位置相交(当然我们比较的是节点地址)。

  • A 指针走完 4 → 1 → 8 → 4 → 5,然后跳到 headB

  • B 指针走完 5 → 0 → 1 → 8 → 4 → 5,然后跳到 headA

  • 最终它们在节点 8 处相遇。


复杂度分析

  • 时间复杂度:O(m + n),m 和 n 分别为两个链表的长度;

  • 空间复杂度:O(1),只用了两个指针,无需额外空间。

http://www.dtcms.com/a/122047.html

相关文章:

  • 我的NISP二级之路-04
  • 系统分析师(二)--操作系统
  • CD24.【C++ Dev】类和对象(15)初始化列表(下)和对象隐式类型转换
  • 深入理解Spring是如何解决循环依赖的
  • [250409] GitHub Copilot 全面升级,推出AI代理模式,可支援MCP | Devin 2.0 发布
  • 数据库管理工具实战:IDEA 与 DBeaver 连接 TDengine(一)
  • Vue2-实现elementUI的select全选功能
  • 卷积神经网络(CNN)基础
  • MicroPython 开发ESP32应用教程 之 WIFI、BLE共用常见问题处理及中断处理函数注意事项
  • 基于视觉密码的加密二值图像可逆数据隐藏
  • 颠覆传统!复旦微软联合研发MagicMotion,重新定义图生视频可能性
  • 品牌出海新思路:TikTok Shop东南亚FACT经营矩阵实操指南
  • 游戏开发中 C#、Python 和 C++ 的比较
  • 六、继承(二)
  • JavaScript学习教程,从入门到精通,JavaScript 运算符及语法知识点详解(8)
  • 2025年Java无服务器架构实战:AWS Lambda与Spring Cloud Function深度整合
  • uniapp 打包 H5 向 打包的APP 使用 @dcloudio/uni-webview-js 传值
  • 数据结构实验4.3:利用队列实现杨辉三角的输出
  • BOTA六维力矩传感器在三层AI架构中的集成实践:从数据采集到力控闭环
  • 绿算技术团队受邀出席英伟达GTC2025大会丨重塑AI存储新范式
  • 【android bluetooth 框架分析 01】【关键线程 3】【bt_jni_thread 线程介绍】
  • MySQL多表查询实战指南:从SQL到XML映射的完整实现(2W+字深度解析)
  • [Windows] Gopeed-v1.7.0
  • HashMap、LinkedHashMap与TreeMap的核心特性与使用场景总结
  • Navicat 17 for Mac 数据库管理
  • C语言资源自动释放实现详解:基于GCC cleanup属性
  • Socket通信保护概论,Android系列
  • SAP-ABAP:SAP PO接口中System Landscape(SL Landscape Directory,SLD)作用详解
  • windows11下pytorch(cpu)安装
  • 记录一次SSH和SFTP服务分离后文件上传权限问题