【发布时间】:2021-05-09 13:39:30
【问题描述】:
我在使用一个非常简单的函数时遇到了问题,我必须创建一个链表,每个节点都存储字符串中的一个字符,我为此创建了一个函数,但是它似乎根本没有做任何事情
这是我正在谈论的函数(变量名称是西班牙语,我很抱歉):
struct listaDoble crearMiADN()
{
char miDni[] = "1234";
struct listaDoble listado = crearLista(strlen(miDni));
struct nodo *actual = listado.first;
for(int i = 0; i<strlen(miDni); i++)
{
if(miDni[i] != '\0' && miDni[i] != EOF)
{
actual->tuNombre[0] = miDni[i];
actual->tuNombre[1] = '\0';
actual = actual->next;
}
}
return listado;
}
这是函数crearLista 可以工作,但您可能需要它来理解我的代码:
struct listaDoble crearLista(int num_nodos)
{
struct listaDoble *result = (struct listaDoble *)malloc(sizeof(struct listaDoble));
if(num_nodos > 0)
{
result->first = (struct nodo *)malloc(sizeof(struct nodo));
result->first->prev = NULL;
struct nodo *actual = result->first;
struct nodo *prev = NULL;
struct nodo *last;
for(int i = 0; i < num_nodos; i++)
{
if(i + 1 != num_nodos)
{
actual->next = (struct nodo*)(malloc)(sizeof(struct nodo));
actual->prev = prev;
actual = actual->next;
prev = actual;
}
else
{
actual->next = NULL;
actual->prev = prev;
last = actual;
}
}
result->last = last;
result->size = num_nodos;
}
else
{
result->first = NULL;
result->last = NULL;
result->size = 0;
}
return *result;
}
在 cmets 中请求
struct listaDoble
{
struct nodo *first, *last;
int size;
};
现在我就是这样称呼 crearMiADN 的东西
struct listaDoble dni = crearMiADN();
现在预期的结果会是这样的
NULL<-- [1] <-> [2] <-> [3] <-> [4] --> NULL
这就是我得到的结果
NULL<-- [] <-> [] <-> [] <-> [] --> NULL
我对指针不是很感兴趣,我试图修复它实际上是试图在某处放置一个 * 并查看它是否有效(剧透警告,它没有)
像这样的
struct listaDoble dni = *crearMiADN(); //type mismatch
然后我尝试修复我这样做的类型不匹配
struct listaDoble crearMiADN()
//...//
return *listado;
}
这又一次出错了,现在我几乎被困在试图将 * 随机放在某个地方并检查它是否编译和工作
【问题讨论】:
-
您能否在问题中添加 listaDoble 结构
-
实际=实际->下一个;上一页=实际;这不会解决您的问题,但您需要替换这些行,否则所有 prev 都将指向它们自己。
-
@DeepakPatankar 添加了
标签: c doubly-linked-list