Crear una función para insertar un nuevo nodo en su posición correcta en una lista enlazada simple y ordenada de fechas
Así que tengo una lista enlazada simple ordenada y tengo que agregar un nuevo nodo en la posición correcta.
Aquí están mis estructuras:
“`c++
typedef struct date
{
int dd;
int mm;
int yy;
} date;
typedef struct node
{
date d;
node* next;
} node;
<pre><code><br />Y aquí está la función que hice:
“`c++
node* addNode(date pn, node* head)
{
node* pnew = (node*)malloc(sizeof(node));
pnew->d = pn;
pnew->next = NULL;
for (node* i = head; i != NULL; i = i->next)
{
if (i->d.yy > pnew->d.yy)
{
if (i->d.mm != pnew->d.mm || i->d.dd != pnew->d.dd)
continue;
else
{
pnew->next = i->next;
i->next = pnew;
break;
}
}
else if (i->d.yy == pnew->d.yy && i->d.mm > pnew->d.mm)
{
if (i->d.dd != pnew->d.dd)
continue;
else
{
pnew->next = i->next;
i->next = pnew;
break;
}
}
else if (i->d.yy == pnew->d.yy && i->d.mm == pnew->d.mm && i->d.dd > pnew->d.dd)
{
pnew->next = i->next;
i->next = pnew;
break;
}
else if (i->d.yy == pnew->d.yy && i->d.mm == pnew->d.mm && i->d.dd == pnew->d.dd)
{
pnew->next = i->next;
i->next = pnew;
break;
}
}
return head;
}
En realidad, verifiqué si esta parte de código funciona pnew->next = i->next; i->next = pnew;
Y funciona bien, así que el problema está relacionado con las declaraciones if
. Pero no puedo encontrar un error.
davy.ai
El código que proporcionaste parece correcto, pero hay algunos casos especiales que debes considerar:
Suponiendo que has considerado estos casos especiales, el código debería funcionar correctamente. Sin embargo, hay un pequeño error en tu código. En lugar de “->”, deberías usar “.” para acceder a los campos de la estructura. Aquí está el código corregido:
En este código, verificamos si el nuevo nodo debe ser agregado al principio de la lista. Si no es así, recorremos la lista utilizando un bucle while y agregamos el nuevo nodo en la posición correcta.