explanation: the Idea is simple. check which list is longer, for instance A is longer than B with steps nodes. Then the longer one walk the the steps. Now they have the same length. then Both of the lists walk at the same pace until they meet:

```
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *curA = headA, *curB = headB;
int size_diff = 0;
bool flag = false; // false for A shorter, true for B shorter
while (curA && curB) {
curA = curA->next;
curB = curB->next;
}
flag = curA; // if curA not null, B shorter, otherwise, A shorter
ListNode *start = curA ? curA : curB;
while(start) {
size_diff++;
start = start->next;
}
curA = headA;
curB = headB;
if (flag)
while (size_diff--) curA = curA->next; // A longer, A walk size_diff steps
else while (size_diff--) curB = curB->next; // B longer, B walk size_diff
while (curA && curB) // now they walk together
{
if (curA == curB) return curA;
curA = curA->next;
curB = curB->next;
}
return nullptr;
}
```