#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if (headA == NULL || headB == NULL)
return NULL;
int numOfNodeA = 0; //链表A的长度
int numOfNodeB = 0;//链表B的长度
ListNode* curA = headA;
ListNode* curB = headB;
while (curA){
++numOfNodeA;
curA = curA->next;
}
while (curB){
++numOfNodeB;
curB = curB->next;
}
int num = numOfNodeA - numOfNodeB;//两链表长度差
curA = headA;
curB = headB;
if (num > 0){ //链表A比B长
while (num-- > 0)
curA = curA->next;
}else{//链表A不比B长
num = -num;
while (num-- > 0)
curB = curB->next;
}
while (curA&&curB){
if (curA == curB)
return curA;
else{
curA = curA->next;
curB = curB->next;
}
}
return NULL;
}
ListNode* createList(ListNode* head){
int numOfNode;
int value;
cout << "please input number of listNode:";
cin >> numOfNode;
cin >> value;
head = new ListNode(value);
ListNode* cur = head;
for (int i = 1; i < numOfNode; ++i){
cin >> value;
ListNode* temp = new ListNode(value);
cur->next = temp;
cur = temp;
}
//cur->next = head;
return head;
}
void printNode(ListNode* head){
ListNode* cur = head;
while (cur){
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
}
};
int main(){
ListNode* headA = NULL;
ListNode* headB = NULL;
Solution solution;
headA = solution.createList(headA);
solution.printNode(headA);
headB = solution.createList(headB);
solution.printNode(headB);
ListNode* begin = solution.getIntersectionNode(headA, headB);
cout << (begin==NULL?0:begin->val) << endl;
system("pause");
return 0;
}