#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
};
int findIntersection(struct node* list1,struct node* list2)
{
struct node* head1=list1,*head2=list2;
int count1=0,count2=0,diff;
if(list1==NULL||list2==NULL)
return -1;
if(list1->next==NULL && list2->next==NULL)
return -1;
while(head1)
{
count1++;
head1=head1->next;
}
while(head2)
{
count2++;
head2=head2->next;
}
if(count1<count2)
{
diff=count2-count1;
head1=list2;
head2=list1;
}
else
{
diff=count1-count2;
head1=list1;
head2=list2;
}
for (int i = 0; i < diff; ++i)
head1=head1->next;
while(head1!=NULL && head2!=NULL)
{
if(head1==head2)
return head1->data;
head1=head1->next;
head2=head2->next;
}
return -1;
}
int main()
{
struct node *new_node;
struct node
*head1
=(struct node
*)malloc(sizeof(struct node
)); head1->data=1;
struct node
*head2
=(struct node
*)malloc(sizeof(struct node
)); head2->data=10;
new_node
=(struct node
*)malloc(sizeof(struct node
)); new_node->data=2;
head1->next=new_node;
new_node
=(struct node
*)malloc(sizeof(struct node
)); new_node->data=3;
head1->next->next=new_node;
new_node
=(struct node
*)malloc(sizeof(struct node
)); new_node->data=20;
head2->next=new_node;
new_node
=(struct node
*)malloc(sizeof(struct node
)); new_node->data=4;
head1->next->next->next=new_node;
head2->next->next=new_node;
new_node
=(struct node
*)malloc(sizeof(struct node
)); new_node->data=5;
head1->next->next->next->next=new_node;
head1->next->next->next->next->next=NULL;
int value=findIntersection(head1,head2);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4Kc3RydWN0IG5vZGUKewoJaW50IGRhdGE7CglzdHJ1Y3Qgbm9kZSAqbmV4dDsKfTsKCgppbnQgZmluZEludGVyc2VjdGlvbihzdHJ1Y3Qgbm9kZSogbGlzdDEsc3RydWN0IG5vZGUqIGxpc3QyKQp7CglzdHJ1Y3Qgbm9kZSogaGVhZDE9bGlzdDEsKmhlYWQyPWxpc3QyOwoJaW50IGNvdW50MT0wLGNvdW50Mj0wLGRpZmY7CglpZihsaXN0MT09TlVMTHx8bGlzdDI9PU5VTEwpCgkJcmV0dXJuIC0xOwoJaWYobGlzdDEtPm5leHQ9PU5VTEwgJiYgbGlzdDItPm5leHQ9PU5VTEwpCgkJcmV0dXJuIC0xOwoKCXdoaWxlKGhlYWQxKQoJewoJCWNvdW50MSsrOwoJCWhlYWQxPWhlYWQxLT5uZXh0OwoJfQoJd2hpbGUoaGVhZDIpCgl7CgkJY291bnQyKys7CgkJaGVhZDI9aGVhZDItPm5leHQ7Cgl9CgoJaWYoY291bnQxPGNvdW50MikKCXsKCQlkaWZmPWNvdW50Mi1jb3VudDE7CgkJaGVhZDE9bGlzdDI7CgkJaGVhZDI9bGlzdDE7Cgl9CgllbHNlCgl7CgkJZGlmZj1jb3VudDEtY291bnQyOwoJCWhlYWQxPWxpc3QxOwoJCWhlYWQyPWxpc3QyOwoJfQoKCWZvciAoaW50IGkgPSAwOyBpIDwgZGlmZjsgKytpKQoJCWhlYWQxPWhlYWQxLT5uZXh0OwoKCXdoaWxlKGhlYWQxIT1OVUxMICYmIGhlYWQyIT1OVUxMKQoJewoJCWlmKGhlYWQxPT1oZWFkMikKCQkJcmV0dXJuIGhlYWQxLT5kYXRhOwoJCWhlYWQxPWhlYWQxLT5uZXh0OwoJCWhlYWQyPWhlYWQyLT5uZXh0OwoJfQoKCXJldHVybiAtMTsKCgkKfQoKaW50IG1haW4oKQp7CglzdHJ1Y3Qgbm9kZSAqbmV3X25vZGU7CglzdHJ1Y3Qgbm9kZSAqaGVhZDE9KHN0cnVjdCBub2RlKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CgloZWFkMS0+ZGF0YT0xOwoKCXN0cnVjdCBub2RlICpoZWFkMj0oc3RydWN0IG5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKCWhlYWQyLT5kYXRhPTEwOwoKCW5ld19ub2RlPShzdHJ1Y3Qgbm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJbmV3X25vZGUtPmRhdGE9MjsKCWhlYWQxLT5uZXh0PW5ld19ub2RlOwoKCW5ld19ub2RlPShzdHJ1Y3Qgbm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJbmV3X25vZGUtPmRhdGE9MzsKCWhlYWQxLT5uZXh0LT5uZXh0PW5ld19ub2RlOwoKCW5ld19ub2RlPShzdHJ1Y3Qgbm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJbmV3X25vZGUtPmRhdGE9MjA7CgloZWFkMi0+bmV4dD1uZXdfbm9kZTsKCgluZXdfbm9kZT0oc3RydWN0IG5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKCW5ld19ub2RlLT5kYXRhPTQ7CgloZWFkMS0+bmV4dC0+bmV4dC0+bmV4dD1uZXdfbm9kZTsKCWhlYWQyLT5uZXh0LT5uZXh0PW5ld19ub2RlOwoKCW5ld19ub2RlPShzdHJ1Y3Qgbm9kZSopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwoJbmV3X25vZGUtPmRhdGE9NTsKCWhlYWQxLT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0PW5ld19ub2RlOwoKCWhlYWQxLT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0PU5VTEw7CgoJaW50IHZhbHVlPWZpbmRJbnRlcnNlY3Rpb24oaGVhZDEsaGVhZDIpOwoKCXByaW50ZigiJWRcbiIsdmFsdWUpOwoKfQ==