在评论区看到的很优雅的解法:定义两个指针分别移动,当其中一个指针如pa移动到链表末尾时指向另一链表的头部headB ,再继续移动,当指针pb移动到末尾时使其指向headB,经过这样的操作,就消除了长度差,两指针当前位置与相交节点之间的距离相同
果然优雅的解法不仅需要计算机技能,还需要数学知识==,以及智商==
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def getIntersectionNode(self, headA, headB):
"""
:type head1, head1: ListNode
:rtype: ListNode
"""
if headA is None or headB is None:
return None
pa = headA
pb = headB
while pa != pb:
if pa:
pa = pa.next
else:
pa = headB
if pb:
pb = pb.next
else:
pb = headA
return pa