题目描述
题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/



解题思路
目标分析:
给定两个单链表的头节点 headA 和 headB,找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 nullptr。
核心约束:
- 时间复杂度为
O(m + n) - 空间复杂度为
O(1)其中m和n分别为两个链表的长度。
方法一:暴力枚举
思路: 使用两层循环遍历链表。将链表 A 中的每个结点的地址都和链表 B 中的每个结点的地址进行比较,如果地址相等,则说明相交。
具体步骤:
- 初始化迭代指针
curNode1 = headA,curNode2 = headB。 - 外层循环遍历链表 A,内层循环遍历链表 B。
- 若
curNode1 == curNode2,代表找到相交结点,直接返回当前结点。 - 内层循环结束后,
curNode1向后移动,curNode2重置为headB。 - 若循环结束仍未找到,返回
nullptr。
复杂度:
- 时间复杂度
O(n^2) - 空间复杂度
O(1)
方法二:双指针(长度差)
思路: 利用链表长度差异对齐指针位置。
- 计算长度:分别求出两个链表的长度。
- 对齐起点:让较长链表的指针先向后移动两个链表长度的差距步数。
- :两个迭代指针同时移动,第一个地址相同的结点就是交点。


