Red de conocimiento informático - Material del sitio web - Cómo invertir in situ una lista enlazada individualmente en bucle Informe del experimento

Cómo invertir in situ una lista enlazada individualmente en bucle Informe del experimento

/Método 1: utilice el puntero auxiliar para recorrer la lista vinculada una vez,

/Almacene el siguiente elemento señalado por el puntero actual durante el proceso de recorrido,

/Luego invierta el puntero al elemento del nodo actual,

/Utilice el puntero almacenado para continuar retrocediendo

struct linka

{<

int datos;

linka* siguiente

};

void inverso(linka*amp; head)

{

if(head = =NULL)

return;

linka *pre, *cur, *ne; >

cur=head -gt;siguiente;

mientras(cur)

{

ne = cur-gt;siguiente;

cur-gt; siguiente = pre;

pre = cur;

cur = ne;

}

cabeza- gt; next = NULL;

head = pre;

}

// Método 2: usar recursividad.

// La idea básica de este método es llamar a una función recursiva para revertir los nodos posteriores antes de revertir el nodo actual.

// Sin embargo, este método tiene la desventaja de que es decir, se formará un bucle en el último nodo después de la reversión,

// Por lo tanto, el siguiente campo del nodo devuelto por la función debe establecerse en NULL. El código fuente es el siguiente:

linka* reverse(linka* p, linka*amp; head)

{

if(p == NULL | p-gt ;siguiente == NULL)

{

head=p;

return p;

}

else

{

linka* tmp = revertir(p-gt; siguiente, encabezado);

tmp-gt; /p>

devuelve p;

}

}