tema:
Pregunta: Use una estructura de almacenamiento de lista de doble enlace y escriba un algoritmo para eliminar el nodo de valor máximo
Ideas principales:
- Crea dos punteros
p
y se usa para recorrer todos los elementos de la lista vinculada; se usa para apuntar a la matrizq
del elemento más grande actualp
q
p
Cada vez que pase por un nodo, comparep.data
con yq.data
, sip.data
>q.data
,q
señale el punto de la p actual.- Cuando
p -> next = frist
se complete el recorrido, verifiqueq
el elemento apuntado en este momento, para que puedaq -> prior -> next = q ->prior
seguirsefree (q)
.
Ilustración:
el código
//求双链表表长
int DllLength(){
int cnt = 0;
int m = first;
while(m -> next != first)
{
m = m -> next;
cnt++;
}
return cnt;
}
//比较,若p.data 大于 q.data则将p赋值给q
void compare(int *p, int *q){
if(p.data > q.data)
q = p;
}
//删除双链表最大值节点
void DeleteDllMax(Dll){
//p、q初始都指向第一个首元节点
int p = first -> next, q = first -> next;
for(int i = 0; i < DllLength(); i++){
//p每移动一次就要将p和q的data进行比较
p = p->next;
compare(p , q);
}
//遍历完毕后删除q(指向最大值)
q -> prior -> next = q -> next;
q -> next -> prior = q -> prior;
free(q);
return;
}
imagen de código
conclusión
Debido a que es una guarnición de algoritmo, los métodos y las ideas proporcionados pueden no ser muy buenos, tenga paciencia conmigo ~ Si tiene alguna pregunta, deje un mensaje para discutir. Si cree que este artículo es útil para usted, ¿puede darnos me gusta gratis? ¡La comunicación entre nosotros es mi mayor motivación!