题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/description/
核心思想:双指针
链表A:1 → 2 → 3 → 8 → 4 → 5
链表B:6 → 7 → 8 → 4 → 5
(相交节点是值为8的节点)步骤1:数得A长度=6,B长度=5。
步骤2:A更长,把A的指针从第1个节点移到第2个节点(6-5=1步),现在A从2开始,B从6开始,剩余长度都是5。
步骤3:A和B一起往后走,走到第4步时,A指向8,B也指向8,返回这个节点。


# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
lenA,lenB = 0,0
#计算链表A和B的长度
cur = headA
while cur:
cur=cur.next
lenA += 1
cur = headB
while cur:
cur=cur.next
lenB += 1
curA,curB = headA,headB
# 交换指针,让lenB永远最长,减少代码冗余if else
if lenA>lenB:
curA,curB =curB,curA
lenA,lenB = lenB,lenA
for _ in range(lenB-lenA):
curB = curB.next
while curA:
if curA == curB:
return curA
else:
curA = curA.next
curB = curB.next
return None