El código se bloquea cuando uso el último puntero en una lista doblemente enlazada.
Así que escribí un código para una lista doblemente enlazada y mientras hacía una función para agregar un nodo al final, pensé en hacer un puntero para el último nodo, pero cuando lo ejecuto para agregar al final, se bloquea pero al agregar en el extremo frontal funciona bien. Todo parece estar bien y ni siquiera muestra ningún error, solo se bloquea.
“`
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *lptr;
struct node *rptr;
};
typedef struct node *Node;
Node pos(Node first, Node last)
{
Node new;
new = (Node)malloc(sizeof(struct node));
new->lptr = NULL;
new->rptr = NULL;
printf("Ingrese datos: ");
scanf("%d", &new->data);
if (first == NULL)
{
first = new;
last = new;
}
else
{
int p;
printf("1) Primero\n2) Último\n");
scanf("%d", &p);
switch (p)
{
case 1:
first->lptr = new;
new->rptr = first;
first = new;
break;
case 2:
last->rptr = new;
new->lptr = last;
last = new;
break;
default:
break;
}
}
return first;
}
void dis(Node first)
{
Node p;
int c = 1;
if (first == NULL)
{
printf("Vacío");
}
else
{
p = first;
while (p != NULL)
{
printf("El elemento %do es %d\n", c, p->data);
c++;
p = p->rptr;
}
}
}
int main()
{
int ch;
Node first, last, t;
first = NULL;
last = NULL;
for (;;)
{
printf("Insertar: \n");
scanf("%d", &ch);
switch (ch)
{
case 1:
first = pos(first, last);
break;
case 2:
dis(first);
break;
default:
printf("inválido");
exit(0);
}
}
return 0;
}
“`</stdlib.h></stdio.h>
davy.ai
Sí, el problema podría estar en esta parte del código. El problema podría estar relacionado con el alcance y la paso-por-valor. Cuando pasas
last
a la funciónpos
, estás pasando su valor, que es la dirección del último nodo. Cuando actualizaslast
dentro de la funciónpos
, no se refleja fuera de la función porque la estás pasando por valor. Por lo tanto, la variablelast
dentro de la funciónmain
permanece igual.Para solucionar esto, puedes pasar un puntero a la variable
last
a la funciónpos
, o puedes devolver el nodolast
actualizado desde la funciónpos
y actualizar la variablelast
dentro de la funciónmain
.