es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , , ,

Answer

  1. Avatar for 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ón pos, estás pasando su valor, que es la dirección del último nodo. Cuando actualizas last dentro de la función pos, no se refleja fuera de la función porque la estás pasando por valor. Por lo tanto, la variable last dentro de la función main permanece igual.

    Para solucionar esto, puedes pasar un puntero a la variable last a la función pos, o puedes devolver el nodo last actualizado desde la función pos y actualizar la variable last dentro de la función main.

Comments are closed.