/*思路:
1.找到兩個鏈表的長度;
2.根據這兩個鏈表的長度差,使較長的那個鏈表向前走相應長度。
3.同時掃描兩個鏈表,尋找它們的交叉節點。*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA == nullptr || headB == nullptr) return nullptr;
int lenA(0), lenB(0);
ListNode *A(headA), *B(headB);
while(A != nullptr){
++lenA;
A = A->next;
}
while(B != nullptr){
++lenB;
B = B->next;
}
int delta = abs(lenA - lenB);
if(lenA > lenB){
while(delta-- > 0) headA = headA->next;
}
else if(lenB > lenA){
while(delta-- > 0) headB = headB->next;
}
while(headA != nullptr && headB != nullptr){
if(headA == headB) return headA;
headA = headA->next;
headB = headB->next;
}
return nullptr;
}
};
LeetCode之Intersection of Two Linked Lists
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.