class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode*currentA = headA, *currentB = headB;
// 计算链表A和B的长度
int lenA = 0, lenB = 0;
while(currentA){
currentA=currentA->next;
lenA++;
}
while(currentB){
currentB=currentB->next;
lenB++;
}
currentA = headA, currentB = headB;
// 根据链表A和B长度差值,保证currentA和currentB到结尾长度相等
// int move =(lenA > lenB)?(lenA-lenB):(lenB-lenA);
// if (lenA>lenB){
// while(move--) currentA = currentA->next;
// } else {
// while(move--) currentB = currentB->next;
// }
if (lenB>lenA){
// 让curA为最长链表的头
std::swap(lenA, lenB);
std::swap(currentA, currentB);
}
int move = lenA - lenB;
while(move--) currentA = currentA->next;
// 遍历找出currentA==currentB
while(currentA){
if (currentA==currentB) return currentA;
currentA = currentA->next;
currentB = currentB->next;
}
return NULL;
}
};