Just store addition information in 'next' pointers.

It's work because memory alignment

```
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
for (ListNode *cur = headA; cur;) {
unsigned long *ptr = (unsigned long *)&cur->next;
cur = cur->next;
*ptr |= 1;
}
ListNode *result = nullptr;
for (ListNode *cur = headB; cur; cur = cur->next) {
unsigned long ptr = (unsigned long)cur->next;
if (ptr & 1) {
result = cur;
break;
}
}
for (ListNode *cur = headA; cur; cur = cur->next) {
unsigned long *ptr = (unsigned long *)&cur->next;
*ptr &= (~0ULL << 1);
}
return result;
}
```