1.分别計算A、B連結清單的長度 countA、countB
2.求A、B連結清單的內插補點index = abs(countA - countB),哪個連結清單長哪個連結清單先走index步
3.A、B連結清單同時走,若走到相同結點,說明有相交結點
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *travel_nodeA = headA,*travel_nodeB = headB,*current_nodeA = headA,*current_nodeB = headB;
int countA = 0,countB = 0,index = 0,count = 0;
while(travel_nodeA != NULL){
travel_nodeA = travel_nodeA->next;
countA++;
}
while(travel_nodeB != NULL){
travel_nodeB = travel_nodeB->next;
countB++;
}
index = abs(countA - countB);
if(countA > countB){
for(int i = 0; i < index; i++){
current_nodeA = current_nodeA->next;
}
}else{
for(int i = 0; i < index; i++){
current_nodeB = current_nodeB->next;
}
}
while(current_nodeA != NULL && current_nodeB != NULL){
if(current_nodeA == current_nodeB){
return current_nodeA;
}
current_nodeA = current_nodeA->next;
current_nodeB = current_nodeB->next;
}
return NULL;
}