- 求两个链表的长度
- 指向长链表的指针 先走 (long_list_len - short_list_len) 步
- 两个指针同时运动
class Solution {
public:
unsigned int getListLen(ListNode *head) {
unsigned int len = 0;
ListNode* ptr = head;
while(ptr != NULL) {
len++;
ptr = ptr->next;
}
return len;
}
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
unsigned int A_len = getListLen(headA);
unsigned int B_len = getListLen(headB);
int len_diff = A_len - B_len;
ListNode* ptr_long = headA;
ListNode* ptr_short = headB;
if(len_diff < 0) {
ptr_long = headB;
ptr_short = headA;
len_diff = B_len - A_len;
}
for(int i = 0;i < len_diff;i++) {
ptr_long = ptr_long->next;
}
while((ptr_long != NULL)&&(ptr_short != NULL)&&(ptr_long != ptr_short)) {
ptr_long = ptr_long->next;
ptr_short = ptr_short->next;
}
return ptr_long;
}
};