class Solution {
public:
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
ListNode* curA = headA;
ListNode* curB = headB;
int lenA = 0, lenB = 0;
while (curA != NULL) { // 求链表A的长度
lenA++;
curA = curA->next;
}
while (curB != NULL) { // 求链表B的长度
lenB++;
curB = curB->next;
}
curA = headA;
curB = headB;
// 让curA为最长链表的头,lenA为其长度
if (lenB > lenA) {
swap(lenA, lenB);//交换长度
swap(curA, curB);//交换地址
}
// 求长度差
int cha = lenA - lenB;
// 让curA和curB在同一起点上(末尾位置对齐)
//让长度更长的链表指针curA先走,直到和curB末尾对齐的位置
while (cha--) {
curA = curA->next;
}
// 遍历curA 和 curB,遇到相同则直接返回
while (curA != NULL) {
if (curA == curB)//注意:这里比较的交点不是数值相等,而是指针相等!!!!!!!!
{
return curA;
}
else//curA和curB同时后移
{
curA = curA->next;
curB = curB->next;
}
}
return NULL;
}
};