剑指 Offer 52. 两个链表的第一个公共节点
原题链接:https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/
输入两个链表,找出它们的第一个公共节点。
思路:
将第一个链表的节点加到哈希集合中,遍历第二个链表,在哈希集合中找到相同元素返回即可!
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
unordered_set<ListNode *> set;
ListNode *cur = headA;
while( cur != nullptr)
{
set.insert(cur);
cur = cur->next;
}
ListNode * temp = headB;
while( temp != nullptr)
{
if(set.count(temp))
{
return temp;
}
temp = temp->next;
}
return nullptr;
}
};
复杂度分析:
时间复杂度:O(m+n),其中 m和 n是分别是链表headA 和}headB 的长度。
空间复杂度:O(m),其中 m 是链表headA 的长度。