#include <bits/stdc++.h>
using namespace std;
class Node {
public:
int data;
Node* next;
};
int getCount(Node* head);
int _getIntesectionNode(int d, Node* head1, Node* head2);
int getIntesectionNode(Node* head1, Node* head2)
{
int c1 = getCount(head1);
int c2 = getCount(head2);
int d;
if (c1 > c2) {
d = c1 - c2;
return _getIntesectionNode(d, head1, head2);
}
else {
d = c2 - c1;
return _getIntesectionNode(d, head2, head1);
}
}
int _getIntesectionNode(int d, Node* head1, Node* head2)
{
Node* current1 = head1;
Node* current2 = head2;
for (int i = 0; i < d; i++) {
if (current1 == NULL) {
return -1;
}
current1 = current1->next;
}
while (current1 != NULL && current2 != NULL) {
if (current1 == current2)
return current1->data;
current1 = current1->next;
current2 = current2->next;
}
return -1;
}
int getCount(Node* head)
{
Node* current = head;
int count = 0;
while (current != NULL) {
count++;
current = current->next;
}
return count;
}
int main()
{
Node* newNode;
Node* head1 = new Node();
head1->data = 9;
Node* head2 = new Node();
head2->data = 8;
newNode = new Node();
newNode->data = 10;
head2->next = newNode;
newNode = new Node();
newNode->data = 5;
head2->next->next = newNode;
newNode = new Node();
newNode->data = 15;
head1->next = newNode;
head2->next->next->next = newNode;
newNode = new Node();
newNode->data = 20;
head1->next->next = newNode;
head1->next->next->next = NULL;
cout << "The node of intersection is " << getIntesectionNode(head1, head2);
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBOb2RlIHsKcHVibGljOgoJaW50IGRhdGE7CglOb2RlKiBuZXh0Owp9OwoKaW50IGdldENvdW50KE5vZGUqIGhlYWQpOwoKaW50IF9nZXRJbnRlc2VjdGlvbk5vZGUoaW50IGQsIE5vZGUqIGhlYWQxLCBOb2RlKiBoZWFkMik7CgppbnQgZ2V0SW50ZXNlY3Rpb25Ob2RlKE5vZGUqIGhlYWQxLCBOb2RlKiBoZWFkMikKewoJaW50IGMxID0gZ2V0Q291bnQoaGVhZDEpOwoJaW50IGMyID0gZ2V0Q291bnQoaGVhZDIpOwoJaW50IGQ7CgoJaWYgKGMxID4gYzIpIHsKCQlkID0gYzEgLSBjMjsKCQlyZXR1cm4gX2dldEludGVzZWN0aW9uTm9kZShkLCBoZWFkMSwgaGVhZDIpOwoJfQoJZWxzZSB7CgkJZCA9IGMyIC0gYzE7CgkJcmV0dXJuIF9nZXRJbnRlc2VjdGlvbk5vZGUoZCwgaGVhZDIsIGhlYWQxKTsKCX0KfQoKaW50IF9nZXRJbnRlc2VjdGlvbk5vZGUoaW50IGQsIE5vZGUqIGhlYWQxLCBOb2RlKiBoZWFkMikKewoJTm9kZSogY3VycmVudDEgPSBoZWFkMTsKCU5vZGUqIGN1cnJlbnQyID0gaGVhZDI7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBkOyBpKyspIHsKCQlpZiAoY3VycmVudDEgPT0gTlVMTCkgewoJCQlyZXR1cm4gLTE7CgkJfQoJCWN1cnJlbnQxID0gY3VycmVudDEtPm5leHQ7Cgl9CgoJd2hpbGUgKGN1cnJlbnQxICE9IE5VTEwgJiYgY3VycmVudDIgIT0gTlVMTCkgewoJCWlmIChjdXJyZW50MSA9PSBjdXJyZW50MikKCQkJcmV0dXJuIGN1cnJlbnQxLT5kYXRhOwoKCQljdXJyZW50MSA9IGN1cnJlbnQxLT5uZXh0OwoJCWN1cnJlbnQyID0gY3VycmVudDItPm5leHQ7Cgl9CgoJcmV0dXJuIC0xOwp9CgppbnQgZ2V0Q291bnQoTm9kZSogaGVhZCkKewoJTm9kZSogY3VycmVudCA9IGhlYWQ7CgoJaW50IGNvdW50ID0gMDsKCgl3aGlsZSAoY3VycmVudCAhPSBOVUxMKSB7CgkJY291bnQrKzsKCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKCX0KCXJldHVybiBjb3VudDsKfQoKaW50IG1haW4oKQp7CglOb2RlKiBuZXdOb2RlOwoJTm9kZSogaGVhZDEgPSBuZXcgTm9kZSgpOwoJaGVhZDEtPmRhdGEgPSA5OwoKCU5vZGUqIGhlYWQyID0gbmV3IE5vZGUoKTsKCWhlYWQyLT5kYXRhID0gODsKCgluZXdOb2RlID0gbmV3IE5vZGUoKTsKCW5ld05vZGUtPmRhdGEgPSAxMDsKCWhlYWQyLT5uZXh0ID0gbmV3Tm9kZTsKCgluZXdOb2RlID0gbmV3IE5vZGUoKTsKCW5ld05vZGUtPmRhdGEgPSA1OwoJaGVhZDItPm5leHQtPm5leHQgPSBuZXdOb2RlOwoKCW5ld05vZGUgPSBuZXcgTm9kZSgpOwoJbmV3Tm9kZS0+ZGF0YSA9IDE1OwoJaGVhZDEtPm5leHQgPSBuZXdOb2RlOwoJaGVhZDItPm5leHQtPm5leHQtPm5leHQgPSBuZXdOb2RlOwoKCW5ld05vZGUgPSBuZXcgTm9kZSgpOwoJbmV3Tm9kZS0+ZGF0YSA9IDIwOwoJaGVhZDEtPm5leHQtPm5leHQgPSBuZXdOb2RlOwoKCWhlYWQxLT5uZXh0LT5uZXh0LT5uZXh0ID0gTlVMTDsKCgljb3V0IDw8ICJUaGUgbm9kZSBvZiBpbnRlcnNlY3Rpb24gaXMgIiA8PCBnZXRJbnRlc2VjdGlvbk5vZGUoaGVhZDEsIGhlYWQyKTsKfQ==