Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
begin to intersect at node c1.
1 /**
2 * Definition for singly-linked list.
3 * struct ListNode {
4 * int val;
5 * ListNode *next;
6 * ListNode(int x) : val(x), next(NULL) {}
7 * };
8 */
9 class Solution {
10 public:
11 ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
12 if(!headA){
13 return NULL;
14 }else if(!headB){
15 return NULL;
16 }
17 ListNode* ListLong = headA;
18 ListNode* ListShort = headB;
19
20 int length1 = GetListLength(headA);
21 int length2 = GetListLength(headB);
22 int diffLength = length1 - length2;
23
24 if(length2 > length1){
25 ListLong = headB;
26 ListShort = headA;
27 diffLength = length2 - length1;
28 }
29
30 for(int i = 0 ; i < diffLength; i++){
31 ListLong = ListLong->next;
32 }
33
34 while((ListLong != NULL) && (ListShort != NULL) && (ListLong != ListShort)){
35 ListLong = ListLong->next;
36 ListShort = ListShort->next;
37 }
38
39 ListNode* CommonNode = ListLong;
40 return CommonNode;
41
42 }
43 unsigned int GetListLength(ListNode* pHead){
44 unsigned int length = 0;
45 ListNode* pNode = pHead;
46 while(pNode != NULL){
47 ++length;
48 pNode = pNode->next;
49 }
50 return length;
51 }
52 };