这里判断链表是否相交的方法是:如果两个链表最后一个结点的地址相同,则两个链表相交。
判断链表相交的结点位置的方法是:分别求出两个链表的长度,设置两个结点指针(list1,list2开始指向两个链表的头结点),然后让长的链表结点走一个abs(长度差)的距离,然后两个指针开始比较地址,开始相交的结点就是第一个地址相同的结点。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int SLength(struct ListNode *head)
{
struct ListNode * l = head;
int len = 1;
while(l)
{
l = l -> next;
len += 1;
}
return len;
}
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(headA == NULL || headB == NULL) return NULL;
struct ListNode* list1 = headA,*list2 = headB;
while(list1->next)
{
list1 = list1 -> next;
}
while(list2->next)
{
list2 = list2 -> next;
}
if(list1 != list2) return NULL;
list1 = headA,list2 = headB;
int len1 = SLength(headA);
int len2 = SLength(headB);
int count = abs(len1 - len2);
if(len1 > len2)
{
while(count --)
{
list1 = list1 -> next;
}
}
else
{
while(count--)
{
list2 = list2 -> next;
}
}
while(list1 && list2)
{
if(list1 == list2)
return list1;
list1 = list1 -> next;
list2 = list2 -> next;
}
return NULL;
}