题目
解法:双指针法
双指针求链表交点是必须要掌握的方法。我们使用两个指针,分别指向两个链表的头节点,并以相同的速度前进,若到达链表结尾,则移动到另一条链表的头节点继续前进。按照这种前进方法,两个指针会在若干次前进后同时到达相交节点。
这种解法的原理在于,如果有交点,两个指针会在走相同的步数后相遇,详见:https://medium.com/swlh/intersection-of-two-linked-lists-a920fe2ec7c2#:~:text=If%20two%20linked%20lists%20have,to%20NULL%20when%20iteration%20terminates.
python:
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
l1 = headA
l2 = headB
while l1!=l2:
l1 = l1.next if l1 else headB
l2 = l2.next if l2 else headA
return l1
C++
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *l1 = headA;
ListNode *l2 = headB;
while(l1!=l2){
l1 = l1 ? l1->next : headB;
l2 = l2 ? l2->next : headA;
}
return l1;
}
};