Pythonでのシングルリンクリストでループを見つける


ループを含む単一リンクリストの先頭を指定します.リストの末尾のポイントは、リストの一部のノードに対してNoneの代わりに指定します.
標準クラスのリンクリストを与えられます
class LinkedList:
    def __init__(self, value):
        self.value = value
        self.next = None
リンクリストを見ると、ループがどこに戻ってくるかを返すべきです.それで、我々の尾ノードの後、我々はそれの後に来ることを返します.
我々は、異なる速度で動いている一度に2つのノードを見ます.ノードがこれまでに等しいならば、それは我々の輪があるところです.
def findLoop(head):
    first = head.next
    second = head.next.next
    while first != second:
        first = first.second
        second = second.next.next
    while first != second:
        first = first.next
        second = second.next
    return first