双指针
原理:
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(!headA||!headB)return NULL;
ListNode* pa=headA;
ListNode* pb=headB;
while(pa!=pb){
pa=(pa?pa->next:headB);
pb=(pb?pb->next:headA);
}
return pa;
}
};
哈希表查找
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
unordered_set<ListNode*>hashset;
while(headA){
hashset.insert(headA);
headA=headA->next;
}
bool flag=0;
while(headB){
if(hashset.count(headB))return headB;
headB=headB->next;
}
return NULL;
}
};