给你两个单链表的头节点
headA
和headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null
。图示两个链表在节点
c1
开始相交:解题思路:
1.先确定两个链表的长度
2.找到两个链表的差值,短的链表从头结点开始,长的链表从两个链表长度差值个节点开始遍历。
3.若找到了相同的节点,则找到了两个相交链表的交点。
4.若没有相同节点,则返回NULL
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{
int GetLengthA=0;
int GetLengthB=0;
for (struct ListNode*p=headA;p!=NULL;p=p->next)
{
GetLengthA++;
}
for (struct ListNode*q=headB;q!=NULL;q=q->next)
{
GetLengthB++;
}
while (GetLengthA>GetLengthB)
{
GetLengthA--;
headA=headA->next;
}
while(GetLengthA
{
GetLengthB--;
headB=headB->next;
}
struct ListNode*p=headA;
struct ListNode*q=headB;
while(p!=q&&p!=NULL&&q!=NULL)
{
p=p->next;
q=q->next;
}
if (p==q)
{
return p;
}
return NULL;
}