[Estructura de datos] Algoritmos para insertar, eliminar e invertir listas lineales (incluidas listas ordenadas) en listas ordenadas y listas vinculadas.
2) Cuando p-> cuando next no está vacío, realice las siguientes operaciones:
(1) Si dos elementos adyacentes no son iguales, tanto P como Q retrocederán un paso;
② De lo contrario, cuando los elementos adyacentes sean iguales, los elementos redundantes se eliminarán.
Código fuente del algoritmo
void Delete_Equal(lista enlazada*L)
{ p =(* L)-& gt; ; Siguiente; /*p y q apuntan a dos elementos adyacentes*/
while(p->; next)
{ if(p-& gt; data ! = q- >Datos) /*Si dos elementos adyacentes no son iguales, tanto P como Q retrocederán un paso*/
{ p = p-> next;
Otro
{ while(q->data == p->Data) /*Eliminar cuando los elementos adyacentes sean iguales Elementos redundantes*/
{ r = q;
q = q-& gt;Siguiente;
Gratis(r);
}
p- >; siguiente = q; p = q; q = p->; siguiente;
}/*else*/
}/*Cuando*/
}/*Delete_Equal */
Intente diseñar un algoritmo para implementar la inversión local de la lista enlazada individualmente del nodo líder.
Análisis de algoritmos
1) Las tablas vacías o las tablas con una longitud de 1 no se procesarán.
2) Cuando la longitud de la tabla exceda 2, realice; la siguiente operación:
Primero divida toda la lista vinculada en dos partes, es decir, desconéctese del primer nodo de elemento de la lista vinculada
② Inserte los elementos actuales Q de la; lista enlazada restante en el encabezado de la lista enlazada uno por uno.
Código fuente del algoritmo
void linked list_reverse (lista enlazada L)
{if (! l-& gt; next ||! l-& gt ; next->next)return;
p = L->next; q = p->;next; s = q->next;p- >;next = NULL/*Desconectar de el primer nodo de elemento de la lista enlazada*/
while(s->;next)
{ q->;next = p ;p = q;
q = s; s = s-& gt; Next; /*Inserta los elementos de L en el nuevo encabezado uno por uno*/
} p>
q->next = p;s->siguiente = q;l->siguiente = s;
}/*LinkList_reverse*/