题目:相交链表
设节点指针A,B分别指向两个链表的头节点,C为首个公共节点
链表A,B的长度分别为a,b,其中公共长度为c
因此,第一次从A走到C的距离是a-c,从B走到C的距离是b-c
当指针A先遍历完链表A,再遍历链表B,直到第二次遇到公共节点C,一共走了a+(b-c)的距离
当指针B先遍历完链表B,再遍历链表A,直到第二次遇到公共节点C,一共走了b+(a-c)的距离
此时可以发现两者所走过的距离相等,因此可以利用这个条件找到第一个公共节点C:
构造while循环,只要A与B指针不相同,就继续向后遍历,因为最后走的距离相同,也就是循环的次数相同,所以在同一个循环中进行两者的遍历即可

1ListNode* getIntersectionNode(ListNode *headA, ListNode *headB)
2 {
3 ListNode *A = headA, *B = headB;
4 while(A != B)
5 {
6 A = A != nullptr ? A->next : headB;
7 B = B != nullptr ? B->next : headA;
8 }
9 return A;
10 }