参考链接:代码随想录:LeetCode206链表相交
注意,判断链表相交的依据是指针是否相等,而非值相等!
解法1:600ms很慢
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* pA=headA,*pB=headB;
for(;pA;pA=pA->next){
for(pB=headB;pB;pB=pB->next){
if(pA==pB&&pA->val==pB->val){
return pA;
}
}
}
if(pA==NULL||pB==NULL){
return NULL;
}
return pA;
}
};
解法2:hash表
先遍历A链表,使用hash表存A的所有元素,然后遍历B链表,查看B中是否存在指针存在于A中,如果存在则返回当前正在遍历的指针,如果遍历完B依然找不到,则无相交!
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* pA=headA,*pB=headB;
unordered_set<ListNode*> sA;
for(;pA;pA=pA->next){
sA.insert(pA);
}
for(;pB;pB=pB->next){
if(sA.count(pB)){
return pB;
}
}
return NULL;
}
};