[Estructura de datos DO pregunta] El nodo intermedio de la lista enlazada

Enlace del título original: https://leetcode.cn/problems/middle-of-the-linked-list/description/

Tabla de contenido

1. Descripción del tema

2. Análisis del pensamiento

3. Implementación del código


1. Descripción del tema

2. Análisis del pensamiento

método de puntero rápido y lento

Encuentre el nodo medio a través de los punteros rápido y lento. El puntero rápido da dos pasos a la vez , y el puntero lento da un paso a la vez . Cuando el puntero rápido llega al final, el puntero lento solo va a la posición media .

Aquí usamos lento para representar punteros lentos y rápido para representar punteros rápidos. Deje que tanto el lento como el rápido apunten al principio del nodo principal.

Si la lista enlazada individualmente tiene un número impar de nodos , cuando fast->next=NULL , slow apunta al nodo intermedio:

 Si la lista enlazada individualmente tiene un número par de nodos , cuando fast==NULL , slow apunta al nodo intermedio:

 

3. Implementación del código

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* middleNode(struct ListNode* head){
    struct ListNode *slow=head,*fast=head;
    while(fast&&fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;
    }
    return slow;
}

Supongo que te gusta

Origin blog.csdn.net/m0_62531913/article/details/132309395
Recomendado
Clasificación