// java
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) return null;
int len1 = lenMeasure(headA);
int len2 = lenMeasure(headB);
// 注意接下来的部分,非常concise but makes sense.
while (len1 > len2) {
headA = headA.next;
len1--;
}
while (len1 < len2) {
headB = headB.next;
len2--;
}
while (headA != headB) {
headA = headA.next;
headB = headB.next;
}
return headA;
}
private int lenMeasure(ListNode head) {
int len = 0;
while (head != null) {
len++;
head = head.next;
}
return len;
}
} class Solution {
int getLen(ListNode* head) {
if (head == nullptr) return 0;
int len = 0;
while (head != nullptr) {
head = head->next;
++len;
}
return len;
}
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int len1 = getLen(headA);
int len2 = getLen(headB);
// make headA be the head of the longer list
if (len1 < len2) {
ListNode* t = headA;
headA = headB;
headB = t;
}
for (int i = 0; i < abs(len1 - len2); ++i) {
headA = headA->next;
}
while (headA != headB) {
headA = headA->next;
headB = headB->next;
}
if (headA == nullptr || headB == nullptr) return nullptr;
else return headA;
}
};