primera pregunta
Hay una lista L enlazada individualmente con un nodo principal, y un algoritmo está diseñado para hacer que sus elementos aumenten en orden
Ideas
Primero copie los datos de la lista vinculada a la matriz y luego use cualquiera de los ocho tipos en la matriz para ordenar, y luego use el método de interpolación de cola para insertar en la lista vinculada
Void sort(LinkList &L){
LNode *p=L->next,*pre;
LNode *r=p->next,*
p->next = NULL;
p=r;
while(pre->next!=NULL&&pre->next->data<p->data){
pre=pre->next;
p->next = pre->next;
pre->next = p;
p=r;
}
}
Segunda pregunta
Intente escribir un algoritmo eficiente para eliminar un nodo mínimo de la lista L enlazada individualmente con el algoritmo a la cabeza.
Ideas
Punteros dobles, uno se usa para recorrer la lista vinculada y el otro se usa para registrar la posición del valor mínimo en los datos actualmente recorridos. Cuando finaliza el recorrido, se puede eliminar directamente en la posición donde se registra el valor mínimo .
LinkList Delect_Min(LinkList &L){
LNode *pre=L, *p=pre->next;
LNode *minpre=pre,*minp=p;
while(p!=NULL){
if(p->data<minp->data){
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next = min->next;
free(minp);
return L;
}
Tercera pregunta
Dos secuencias enteras A, B, determinan si B es una subsecuencia de A
Ideas
Al atravesar A, compare si hay el mismo número que el primer número de B. Si no está al final del recorrido, significa que no lo está. Si existe, atraviese A y B sincrónicamente y compare los tamaños, y luego las colas de la B atravesada son iguales Es solo entonces que B es una subsecuencia de A
int patten(LinkList A,LinkList B){
LNode *p=A;
LNode *pre=p;
LNode *q=B;
while(p&&q)
if(p->data==q->data){
p=p->next;
q=q->next;
}
else{
pre=pre->next;
p=pre;
q=B;
}
if(q==NULL)
return 1;
else
return 0;
}