Intersección de dos listas ligadas
Este problema consiste en verificar si dos listas tienen un nodo en común
Solución
# 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
"""
l1, l2 = headA, headB
while l1!=l2:
l1 = l1.next if l1 else headB
l2 = l2.next if l2 else headA
return l1
Esta solución consiste en tener dos “punteros”, uno al principio de cada lista, y se avanza uno por uno, en donde si ambos son de la misma longitud y si ambos no están conectados, cuando lleguen al final el valor será None y se regresará None, el resultado correcto, si están conectados en un punto X, si esta unión está a la misma distancia de la cabeza entonces llegarán al mismo tiempo, si uno está más cerca de la cabeza que el otro, el más corto comenzará en la cabeza del otro, y cuando el otro termine y comience en la cabeza del anterior, estarán a la misma distancia del punto pues el primero avanzó la diferencia que existe y si existe una unión llegarán a ella al mismo tiempo, si no entonces llegarán ambos a null, la condición se cumple y se regresa el valor correcto