解题思路:
要找到相交结点,首先计算出两个链表的长度,先让长的链表走abs(lenA-lenB)步,然后再同步进行遍历,如果两个结点相等则返回true否则为false。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode Node;
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
Node* cur1 = headA,*cur2 = headB;
int lenA = 0, lenB = 0;
while(cur1)
{
++lenA;
cur1 = cur1->next;
}
while(cur2)
{
++lenB;
cur2 = cur2->next;
}
int gap = abs(lenA - lenB);
Node* longlist = headA,*shortlist = headB;
if(lenA < lenB)
{
longlist = headB;
shortlist = headA;
}
while(gap--)
{
longlist = longlist->next;
}
while(shortlist && longlist)
{
if(shortlist == longlist)
{
return longlist;
}
else
{
shortlist = shortlist->next;
longlist = longlist->next;
}
}
return NULL;
}