/*思路:
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
最新推荐文章于 2019-09-03 12:43:06 发布