operaciones - listas enlazadas en java
Problema al vincular un nuevo nodo a listas vinculadas en c (1)
Soy nuevo en C y también nuevo en la programación, y acabo de empezar a buscar listas enlazadas.
static struct post {
char * str;
struct post * next;
}
head = {0, NULL};
int stringdb_add(const char * str) {
int pos = 0;
struct post * new_input = (struct post * ) malloc(sizeof(struct post));
new_input - > str = (char * ) malloc(strlen(str) + 1);
if (head.next == NULL) {
strcpy(new_input - > str, str);
new_input - > next = NULL;
head.next = new_input;
} else {
while (head.next - > next) {
++pos;
head.next = head.next - > next;
}
strcpy(new_input - > str, str);
new_input - > next = NULL;
head.next - > next = new_input;
}
return pos;
}
Se supone que la función "stringdb_add" devuelve la posición en la que se ha colocado el nuevo nodo, pero cuando pruebo la función solo obtengo (00111111 ....).
Esto es probablemente porque la lista nunca se vincula correctamente.
while (head.next->next) { ++pos; head.next = head.next->next; }
Estás cambiando de forma permanente head.next
que seguramente no es lo que quieres. Probablemente quieras algo como:
struct post *p = &head;
while (p->next->next)
/* ... */
Nitpick: strcpy(new_input->str, str)
puede estar en un solo lugar, antes del if
.