Notas de la lista de llamadas (para uso personal)

lista enlazada circular

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
En cualquier caso, lento puede caminar medio círculo como máximo, y
los punteros rápido y lento dan un paso lento, y dos pasos rápido son los más apropiados, porque suponiendo que la diferencia entre rápido y lento es n cada vez que se mueven adelante, habrá una diferencia de n-1 pasos, por lo que definitivamente se encontrarán, si se trata de una lista enlazada circular.
el código

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    
    
    struct ListNode *fast=head;
    struct ListNode *slow=head;
    while(fast && fast->next)
    {
    
    
        slow=slow->next;
        fast=fast->next->next;
        if(fast == slow)
        {
    
    
            return true;
        }
    }
    return false;
}

Notas para uso personal, ¡la calidad del artículo no es buena! ! !

Supongo que te gusta

Origin blog.csdn.net/2301_76895050/article/details/132371357
Recomendado
Clasificación