原始想法是双重循环遍历两个链表,比较两个链表的当前值是否相同。这样存在一个问题,链表中的元素有重复,比如上例,可以返回相同的元素是4.
嗐,黔驴技穷,翻看大神的题解
同时遍历两个链表,指针A遍历完headA后遍历headB,指针B遍历完headB后遍历headA,二者相遇时,是遇到的首个公共节点。此时,二者分别遍历了a+b-c个元素。
多么简洁优美的代码
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
pa = headA
pb = headB
while pa != pb:
pa = pa.next if pa else headB
pb = pb.next if pb else headA
return pa