有交点
没有交点
判断是否有交点,然后返回两个链表相交的节点,首先要判断两个链表是否相交,从上图可以看到如果相交,那么他俩个链表的最后一个节点的地址一定相等,而不是值!然后判断完相交后,如何找到交点,我们首先要定义两个整型变量,然后在两个链表找最后节点时,分别记录两个链表的长度,然后让长的链表减短的链表,用个整型变量num接收相减的值,这样做是为了让长的链表走num步,这样两个链表长度相等,然后就用长节点指针从头开始与短节点指针开始比较,如果他俩相等,那就是两个链表相交的节点。还要注意链表为空的情况,如果为空,那么两个链表不相交返回NULL。代码如下
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode*listA=headA;
struct ListNode*listB=headB;
int a=1;
int b=1;
if(headA==NULL)
return NULL;
if(headB==NULL)
return NULL;
while(listA->next)
{
listA=listA->next;
a++;
}
while(listB->next)
{
listB=listB->next;
b++;
}
if(listA!=listB)
{
return NULL;
}
int mun=abs(a-b);
struct ListNode*fast=headA;
struct ListNode*slow=headB;
if(b>a)
{
fast=headB;
slow=headA;
}
while(mun--)
{
fast=fast->next;
}
while(fast!=slow)
{
fast=fast->next;
slow=slow->next;
}
return fast;
}
abs是算绝对值