题目描述:
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:

题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
题源:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
/*ListNode *res=NULL;
while(headA!=NULL)
{
ListNode *h=headB;
while(h!=NULL)
{
if (h==headA){res=headA; break;}
h=h->next;
}
if (res!=NULL) break;
headA=headA->next;
}
return res;*/ //暴力法一
int l1=0,l2=0;
ListNode *t=headA,*res=NULL;
while (t!=NULL)
{
l1++;
t=t->next;
}
t=headB;
while (t!=NULL)
{
l2++;
t=t->next;
}
if(l2>l1) {t=headA; headA=headB; headB=t; swap(l1,l2);}
for(int i=1;i<=l1-l2;i++) headA=headA->next;
while(headA!=NULL)
{
if (headA==headB) {res=headB; break;}
headA=headA->next;
headB=headB->next;
}
return res;
} // 统计两个链表的长度,让长链表走完差值,再一起向后推动
};