Gane la oferta - el anillo de la lista de entrada

título Descripción

Para una lista enlazada, en donde si los comprende el anillo, encontrar la lista de nodos anillo de entrada, de lo contrario, null salidas.

Requisitos: la complejidad espacial es O (1)

pensamiento

Con dos punteros, el puntero se mueve rápidamente dos veces, una vez para ir a un puntero paso lento. Si hay un anillo, que se reunirá

Después del encuentro, puede ser fijado por un puntero, el puntero se mueve a otra para obtener una longitud de bucle n

A continuación, los dos punteros apuntan a la cabeza, van puntero n pasos rápidos, y el puntero paseo continuación lento. Dos punteros son un paso, donde se reunirá en el ring para comenzar.

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
import collections
class Solution:
    def EntryNodeOfLoop(self, pHead):
        if not pHead:
            return None
        slow = pHead.next
        fast = pHead.next
        if fast:
            fast = fast.next
        else:
            return None
        while slow and fast:
            if slow != fast:
                slow = slow.next
                fast = fast.next
                if fast:
                    fast = fast.next
                else:
                    return None
            else:
                break
                
        if fast and slow:
           # 找到圈的长度
            n = 1
            slow = slow.next
            while slow!=fast:
                slow = slow.next
                n += 1
            
            slow = pHead
            fast = pHead
            for i in range(n-1):
                fast = fast.next
            while fast != slow:
                slow = slow.next
                fast = fast.next
            return fast
        else:
            return None

 

Publicado 82 artículos originales · ganado elogios 2 · Vistas 4345

Supongo que te gusta

Origin blog.csdn.net/qq_22498427/article/details/104981174
Recomendado
Clasificación