【每天学习一点算法 2026/03/08】相交链表

每天学习一点算法 2026/03/08

题目:相交链表

给你两个单链表的头节点 headAheadB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null

  1. 我们可以先遍历一个链表将所有节点都存放在 Set 集合中,然后遍历另外一个链表遇到相同节点则表示这就是相交起始节点,如果没有相同节点则表示不存在相交节点。

    typescript 复制代码
    /**
     * Definition for singly-linked list.
     * class ListNode {
     *     val: number
     *     next: ListNode | null
     *     constructor(val?: number, next?: ListNode | null) {
     *         this.val = (val===undefined ? 0 : val)
     *         this.next = (next===undefined ? null : next)
     *     }
     * }
     */
    
    function getIntersectionNode(headA: ListNode | null, headB: ListNode | null): ListNode | null {
      const set = new Set()
      while (headA) {
        set.add(headA)
        headA = headA.next
      }
      while (headB) {
        if (set.has(headB)) {
          return headB
        }
        headB = headB.next
      }
      return null
    };
  2. 双指针解法

    我们看图中这种情况,我们可以看出

    用一个指针遍历A链表,然后再遍历B链表,第二次到达相交节点的需要遍历的次数

    用一个指针遍历B链表,然后再遍历A链表,第二次到达相交节点的需要遍历的次数

    是相等的

    所以我们可以用两个指针分别遍历 A → B 和 B → A,两个指针节点第一次相遇的节点就是相交的起始节点,如果两个指针都遍历完了还没相遇那就没有相交节点。

    typescript 复制代码
    function getIntersectionNode(headA: ListNode | null, headB: ListNode | null): ListNode | null {
      let tempA = headA
      let tempB = headB
      while (tempA != tempB) {
        tempA = tempA == null ? headB : tempA.next
        tempB = tempB == null ? headA : tempB.next
      }
      return tempA
    };

题目来源:力扣(LeetCode)

相关推荐
爱吃苹果的日记本10 分钟前
数据结构第三课(时间复杂度)
数据结构·学习
罗西的思考1 小时前
机器人模型(WM / WAM / VLA)综合分析与对比:从「看」到「想」再到「做」
人工智能·算法·机器学习
小哈里2 小时前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
小π军3 小时前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司3 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
泡泡鱼(敲代码中)3 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
a187927218313 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解
铭哥的编程日记3 小时前
从一道 LeetCode Hard 到吃透一类题:加权区间调度「排序 + 二分 + DP」
算法·leetcode·职场和发展
Navigator_Z4 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
fanged4 小时前
Agent的Skills(TODO)
学习