看上面这个例子时我就很疑惑,如果是两个点值相同就是相交,那么1才是交点啊。然后发现不是的,应该判断整个节点(地址)是不是相同。
那么就好办了。一个很好理解的方法是先计算出两个链表的长度差d,然后让长的那个先走d步,再让两者同时出发,相遇(节点相同)处即为交点。如果两者皆走到了空值,即不相交。
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:lenA=0lenB=0A=headAB=headBwhile A:lenA+=1A=A.nextwhile B:lenB+=1B=B.nextA=headAB=headBif lenA>lenB:for i in range(lenA-lenB):A=A.nextelse:for i in range(lenB-lenA):B=B.nextwhile A and B:if A==B:return AA=A.nextB=B.nextif not A and not B:return None