yo estaba buscando en el código de abajo de Stanford biblioteca:Linked lista recursiva inversa
void recursiveReverse(struct node** head_ref)
{
struct node* first;
struct node* rest;
/* empty list */
if (*head_ref == NULL)
return;
/* suppose first = {1, 2, 3}, rest = {2, 3} */
first = *head_ref;
rest = first->next;
/* List has only one node */
if (rest == NULL)
return;
/* put the first element on the end of the list */
recursiveReverse(&rest);
first->next->next = first;
/* tricky step -- see the diagram */
first->next = NULL;
/* fix the head pointer */
*head_ref = rest;
}
Lo que no entiendo es en el último paso recursivo para, por ejemplo si la lista está 1-2-3-4 Ahora para el último paso recursivo, primero será 1 y el resto será 2. Entonces, si establece * head_ref = rest ... ¿eso hace que el encabezado de la lista 2? ¿Puede alguien explicar por favor cómo después de invertir el encabezado de la lista se convierte en 4?
¡Gran explicación! Muchas gracias! – harihb
@ chris: \t * head_ref = rest; No lo entiendo ... por favor ayúdenme a superar esto – kTiwari
head_ref es una referencia al primer nodo en la (sub) lista en el nivel actual de recursión. El resto se refiere al primer nodo en el resto de la lista. Por lo tanto, establecer head_ref para descansar tiene el efecto de cortar la cabeza anterior. –