算法1
思路:询问两个链表第一个公共点,这个题的巧妙之处在于,headA与headB走的总距离相同,然后她们都会经历的同一个交叉点就是第一个公共节点,也就相当于a+c+b=b+c+a一样
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
auto p=headA,q=headB;
while(p!=q)
{
p=p ?p->next:headB;//如果p不空,p就走到他的下一个节点,如果
// p空了,说明此时p只能往回走,去往headB走
q=q ?q->next:headA;
//这里觉得很好玩,就是询问这个节点q=,q说我要走哪里呢,q?q也不知道,然后给出两种选择
}
}
};