52. 两个链表的第一个公共节点【双指针】

输入两个链表,找出它们的第一个公共节点。

如下面的两个链表:

在节点 c1 开始相交。

示例 1:

示例 2:

示例 3:

注意:

  • 如果两个链表没有交点,返回 null.

  • 在返回结果后,两个链表仍须保持原有的结构。

  • 可假定整个链表结构中没有循环。

  • 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

2. 标签

  • 链表

  • 双指针

3. 解法 - 双指针

太6了,我的理解: 两个链表长度分别为L1+C、L2+C, C为公共部分的长度,按照楼主的做法: 第一个人走了L1+C步后,回到第二个人起点走L2步;第2个人走了L2+C步后,回到第一个人起点走L1步。 当两个人走的步数都为L1+L2+C时就两个家伙就相爱了。——eatalot

⬆️ 哈哈哈哈哈哈笑死我了

3.1 Java

3.2 复杂度分析

  • 时间复杂度 O(M+N) :M 和 N 分别是两个链表的长度。

  • 空间复杂度 O(1) :整个过程只占用了常数大小的存储空间。

4. 解法 - 集合Set

4.1 Java

4. 参考

最后更新于

这有帮助吗?