LeetCode 160:相交链表
题目描述
给定两个单链表的头节点 headA 和 headB,找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 nullptr。
核心要求:
- 时间复杂度为
O(m + n) - 空间复杂度为
O(1) - 其中
m和n分别为两个链表的长度

思路分析
方案一:暴力比对
最直观的思路是遍历链表 A 中的每个节点,检查它是否出现在链表 B 中。这相当于对两个链表进行全量地址比对。
具体操作如下:
- 使用两个指针
curNode1和curNode2分别指向headA和headB。 - 外层循环遍历链表 A,内层循环遍历链表 B。
- 当
curNode1 == curNode2时,说明找到了公共节点,直接返回。 - 若内层循环结束仍未找到,重置
curNode2到headB,继续外层循环。
这种方法逻辑简单,但效率较低,时间复杂度为 O(n^2),空间复杂度为 O(1)。
// 暴力解法 O(n^2)
class Solution {
public:
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
ListNode* curNode1 = headA;
ListNode* curNode2 = headB;
while (curNode1) {
while (curNode2) {
if (curNode1 == curNode2) curNode1;
curNode2 = curNode2->next;
}
curNode1 = curNode1->next;
curNode2 = headB;
}
;
}
};


