LeetCode02.07.链表相交
思路:
重点是两个链表同步前进,同个起点,同样步长,那么我们需要知道两个链表的长度,让长的对齐短的,也就是说,按照图上的示例1,链表A从4开始,那么B要从0开始,也就是我们所说的对齐,剩下就是常规操作了
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{
struct ListNode *L=headA;
struct ListNode *S=headB;
int LenA=0,LenB=0;//用于记录各链表长度
int abs;//记录长度差值
//1.求出A,B链表各自的长度
while(L)
{
LenA++;
L=L->next;
}
while(S)
{
LenB++;
S=S->next;
}
if(LenA>=LenB)
{
abs=LenA-LenB;
L=headA;
S=headB;
}
else
{
abs=LenB-LenA;
L=headB;
S=headA;
}
//2.长链表起始指针pX往前移动,确保两链表同步移动
for(int i=0;i<abs;i++)
L=L->next;
//3.查找是否相交
while(L)
{
if(L==S)
return L;
L=L->next;
S=S->next;
}
return NULL;
}