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.
思路:先计算两个链表的长度,移动较长链表的头指针,使得其后的节点个数与短链表一致
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int lenA = 0, lenB = 0;
ListNode *A = headA, *B = headB;
while (A != nullptr) {
A = A->next;
lenA++;
}
while (B != nullptr) {
B = B->next;
lenB++;
}
ListNode *lon, *sho;
int distance = abs(lenA - lenB);
if (lenA > lenB) {
lon = headA;
sho = headB;
}
else {
lon = headB;
sho = headA;
}
while(distance!=0){
lon = lon->next;
distance--;
}
while (lon != sho) {
lon = lon->next;
sho = sho->next;
}
return lon;
}
};