gpt4 book ai didi

c - C 中的链表

转载 作者:行者123 更新时间:2023-11-30 19:07:52 25 4
gpt4 key购买 nike

我正在练习c中的链表,我想使用rand在节点中存储字符,但是最后一个字母在列表中重复,任何人都可以看到发生了什么?

用这个函数我填充节点:

nodo* nodoListas(nodo*Lista){
int i;
char *elemento, caracter;
srand (time(NULL));
for (i = 0; i< CANT_NODOS; i++){
caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;
Lista = agregarNodo (Lista, elemento);
}
}

这是函数 agregarNodo:

nodo* agregarNodo (nodo* Lista, char* elemento){
nodo* nuevoNodo, *aux;
nuevoNodo = (nodo*) malloc (sizeof(nodo));
nuevoNodo -> elemento = elemento;
nuevoNodo -> siguiente = NULL;
if(Lista == NULL){
Lista = nuevoNodo;
}
else{
aux = Lista; //para no perder el elemento
while(aux->siguiente != NULL){
aux = aux -> siguiente;
}
aux-> siguiente = nuevoNodo;
}
return Lista;
}

这是我正在执行的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CANT_NODOS 5

typedef struct Nodo{
char* elemento;
struct Nodo* siguiente; /*vinculo para unir mas nodos*/
}nodo;

//funcion que genera o crea una lista
nodo* ListaElementos(nodo* Lista){
Lista = NULL ;
return Lista;
}

// funcion que agrega nodos a la lista

nodo* agregarNodo (nodo* Lista, char* elemento){
nodo* nuevoNodo, *aux;
nuevoNodo = (nodo*) malloc (sizeof(nodo));
nuevoNodo -> elemento = elemento;
nuevoNodo -> siguiente = NULL;
if(Lista == NULL){
Lista = nuevoNodo;
}
else{
aux = Lista; //para no perder el elemento
while(aux->siguiente != NULL){
aux = aux -> siguiente;
}
aux-> siguiente = nuevoNodo;
}
return Lista;
}
//Funcion que libera la memoria
void LiberarLista (nodo* Lista ){

free (Lista);
}

nodo* Lista1;
nodo* Lista2;

nodo* nodoListas(nodo*Lista){
int i;
char *elemento, caracter;
srand (time(NULL));
for (i = 0; i< CANT_NODOS; i++){
caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;
Lista = agregarNodo (Lista, elemento);
}
}

int main(void){
Lista1 = ListaElementos(Lista1);
Lista2 = ListaElementos(Lista2);
Lista1 = nodoListas(Lista1);

//impresion Lista 1
while (Lista1 != NULL){
printf("%s\t", Lista1->elemento);
Lista1 = Lista1 -> siguiente;
}
return 0;
}

最佳答案

当你这样做时:

caracter = /*(char*)*/(65 +rand()% 25);
elemento = &caracter;

您正在将新的随机值写入声明为字符的内存空间中,然后将指针(elemento)放入该内存空间。但是您始终在所有 for 循环中使用相同的内存空间字符。因此,您总是在同一位置写入并指向同一位置,并且只是更新其值,因此重复了最后一个字符值。

关于c - C 中的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46392810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com