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
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;
}