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

[160] Intersection of Two Linked Lists 链表相交

[160] Intersection of Two Linked Lists

力扣题目链接

1. 长度对齐法
1.1 思想

相交链表的两个性质:

  1. 共享尾部

    如果两个单向链表相交,那么从第一个相交节点开始,到链表末尾的所有节点,都是两条链表完全共享的。它们不可能在此之后再分开。

  2. 交点即指针相等

    真正的相交,必须是物理上(内存地址上)的汇合,而不是节点值恰好相等。

    所谓的“交点”,不是指两个节点的 val 值相等,而是指两个链表的指针指向了内存中同一个节点对象

    因此,在代码中,我们寻找交点的方法是直接比较指针是否相等:if (pointerA == pointerB)。

利用这个性质,我们可以让两个指针分别从两条链表的某个位置出发,保证它们到链表末-尾的距离相等,然后同步前进,找到它们第一次相遇(指针相等)的地方。

1.2 AC代码
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { // --- 1. 计算两个链表的长度 --- ListNode *curA = headA; ListNode *curB = headB; int lenA = 0, lenB = 0; // 遍历链表A,获取其长度 while (curA != nullptr) { lenA++; curA = curA->next; } // 遍历链表B,获取其长度 while (curB != nullptr) { lenB++; curB = curB->next; } // --- 2. 对齐两个链表的起点 --- // 将指针重新移回头节点,准备进行对齐操作 curA = headA; curB = headB; // 通过 swap 保证 curA 指向较长的链表,curB 指向较短的链表 // 这样做可以简化后续代码,无需写 if-else 分支 if (lenB > lenA) { swap(lenA, lenB); swap(curA, curB); } // 计算长度差 int gap = lenA - lenB; // 让较长的链表的指针 curA 先向前移动 gap 步 // 移动后,curA 和 curB 到达链表末尾的距离就相等了 while (gap--) { curA = curA->next; } // --- 3. 同步前进,寻找第一个相交节点 --- while (curA != nullptr) { // 核心判断:比较两个指针是否指向同一个内存地址 // 如果指针相等,说明找到了第一个公共节点 if (curA == curB) { return curA; } curA = curA->next; curB = curB->next; } // 如果循环结束都没有相遇,说明两个链表不相交 return nullptr; }
1.3 时空复杂度

时间复杂度:O(La + Lb)

空间复杂度:O(1)

2.双指针法

http://www.cnnetsun.cn/news/111490.html

相关文章:

  • 开展性能测试步骤
  • Coze工作流实战:从踩坑到精通
  • JSON性能革命:RapidJSON如何用SIMD技术改写C++数据处理格局
  • ImageOptim跨版本兼容性全面解析:从macOS 10.13到最新系统的实战指南
  • Qwen3-30B-A3B-Instruct-2507:小参数激活大智慧的AI新范式
  • 打造极速构建体验:BuildKit配置文件深度调优实战
  • 从线上事故看 Java 系统的真实韧性:为什么它总能撑到最后一刻
  • AI Agent框架终极部署指南:从零到生产环境的完整路径
  • 前端性能优化终极指南:让文件转换体验如丝般顺滑
  • 3步彻底解决Dokploy中.traefik.me证书失效问题
  • MCP AI-102模型评估指标全曝光:为什么你的F1-score总是偏低?
  • 量子模拟器环境搭建陷阱与解决方案(90%新手都会犯的3个错误)
  • 【仅限专业人士】量子机器学习调试内幕(VSCode高级功能首次公开)
  • Monet色彩系统如何让Seal视频下载器实现完美的主题一致性
  • 超强Visio形状库:告别绘图瓶颈的终极解决方案
  • ITPUB 专访|李志宇:在 AGI 的未来版图中,记忆是最有温度的力量
  • 音频分离黑科技:3步实现智能多说话人识别
  • 如何快速掌握pose-search:人体姿态搜索的完整指南
  • Agent性能提升迫在眉睫?,立即掌握这3种Docker级性能加速黑科技
  • Note-Gen图片上传实战:从本地预览到云端同步的完整指南
  • VSCode调试Azure QDK API时总出错?这7个坑你必须避开
  • MCP续证Agent开发考核标准全曝光(权威解读+内部评分细则)
  • Android应用沙盒革命:VirtualApp如何重塑移动多开体验
  • 精通SynthDoG:实战构建百万级多语言文档数据集的完整指南
  • Docker MCP网关错误处理避坑指南:3年生产环境踩过的坑一次性说清
  • Golin网络安全扫描工具:从零开始的完整实战指南
  • 告别传统免疫:多肽文库筛选如何让CAR-T研发“快人一步”?
  • 终极gsplat.js指南:快速掌握3D高斯点渲染技术
  • PiKVM OS深度定制指南:从零打造专属远程管理平台
  • 学习笔记096——Windows postgreSQL-18.1[压缩包版本]