Asthenian1年前
[算法学习Day227]相交链表-比较罕见的双指针法 一:需求分析 A. 功能需求 需要实现一个方法 getIntersectionNode,用于找到两个单链表的交点。如果没有交点,返回 null。 B. 输入输出 输入:两个单链表的头节点 headA 和 headB。 输出:交点的节点,如果不存在交点则返回 null。 C. 性能需求 要求算法的时间复杂度为 O(m + n),空间复杂度为 O(1)。 D. 边界情况 需要处理链表为空的情况,以及两条链表完全不相交的情况。 二:算法选型 A. 双指针法 选择使用双指针的方法,因为它能有效解决链表长度不同的问题,并且避免使用额外的空间。 B. 遍历与切换 通过让两个指针在遍历到各自链表末尾后切换到另一条链表的头部,可以确保两个指针在同一位置比较,从而找到交点。 C. 线性时间复杂度 这个算法的设计保证了在最坏情况下每个指针最多遍历两个链表一次,因此时间复杂度为 O(m + n)。 三:逻辑处理 A. 初始化指针 首先检查两个链表是否为空,如果有一个为空,直接返回 null。然后初始化指针 pA 和 pB 分别指向 headA 和 headB。 B. 循环比较 使用 while(pA != pB) 循环来比较两个指针的位置。如果指针相同,则表示找到了交点,返回该节点。 C. 指针切换 在循环中,当指针 pA 或 pB 到达链表末尾时,将其切换到对方链表的头部。这样可以平衡两个链表的长度差异。 D. 终止条件 当两个指针都遍历到 null 时,循环结束,这意味着没有交点,此时 pA 和 pB 都是 null,函数返回 null。 E. 返回结果 最终,如果找到交点,返回 pA(或 pB,它们此时相等),否则返回 null。 #双指针 #计算机 #链表 #力扣 #面试
00:00 / 07:41
连播
清屏
智能
倍速
点赞18
00:00 / 01:54
连播
清屏
智能
倍速
点赞10
00:00 / 02:24
连播
清屏
智能
倍速
点赞10
00:00 / 00:41
连播
清屏
智能
倍速
点赞12