这是我的一个链表结构:链表的帮助请求
typedef struct intervalo *Lista;
typedef struct intervalo
{
int num;
Lista next;
}Lista_int;
这是我的代码的部分(我做了),破坏名单:
Lista destroi_lista_res(Lista lista)
{
Lista temp_ptr;
while (lista->next!= NULL)
{
temp_ptr = lista;
lista= lista->next;
free(temp_ptr);
}
free(lista);
return NULL;
}
不幸的是,我的程序当这个函数被调用时挂起。具体地说,while (lista->next!= NULL)
永远不会终止。
我的问题:为什么这条线会导致无限循环?
附加代码的细节:
在main(),创建了两个列表。
/* Create linked list. */
Lista cria_lista_cab()
{
Lista aux;
aux=(Lista)malloc(sizeof(Lista_int));
if(aux!=NULL)
{
aux->next=NULL;
}
return aux;
}
下列函数被用来添加数量的节点以结束两个列表:
/* Insert node at the list tail. */
void insere_elem(Lista *lista,int num)
{
Lista aux,ant_pos=*lista,pos=ant_pos->next;
aux=(Lista)malloc(sizeof(Lista_int));
while(pos!=NULL)
{
ant_pos=ant_pos->next;
pos=pos->next;
}
aux->num=num;
aux->next=pos;
ant_pos->next=aux;
}
下一个函数结合了列表的数量节点,消除在增加数字顺序重复。返回结果列表:
Lista cria_lista_una(Lista lista1,Lista lista2)
{
Lista lista_res=cria_lista_cab();
lista1=lista1->next;
lista2=lista2->next;
while(lista1!=NULL && lista2!=NULL)
{
if(lista1->num<lista2->num)
{
insere_elem(&lista_res,lista1->num);
printf("\n1 %d %d",lista1->num,lista2->num);
if(lista1!=NULL)
lista1=lista1->next;
}
else if(lista2->num<lista1->num)
{
insere_elem(&lista_res,lista2->num);
printf("\n2 %d %d",lista1->num,lista2->num);
if(lista2!=NULL)
lista2=lista2->next;
}
else if(lista2->num==lista1->num)
{
printf("\n3 %d %d",lista1->num,lista2->num);
if(lista1!=NULL)
lista1=lista1->next;
else if(lista2!=NULL)
lista2=lista2->next;
}
}
if(lista1!=NULL)
{
while(lista1!=NULL)
{
insere_elem(&lista_res,lista1->num);
lista1=lista1->next;
}
}
else if(lista2!=NULL)
{
while(lista2!=NULL)
{
insere_elem(&lista_res,lista2->num);
lista2=lista2->next;
}
}
return lista_res;
}
以下函数用于打印列表。
void imprime_lista_res(Lista lista)
{
lista=lista->next;
while(lista!=NULL)
{
printf("\nNum-> %d",lista->num);
lista=lista->next;
}
}
除了在清理时调用destroi_lista_res()并且程序挂起时,一切似乎都按预期运行。 。
你看到的错误很可能在两个地方之一:要么调用这个函数的代码,要么代码创建链接列表,你能发布一个完全兼容的测试用例,展示你正在看到的问题吗? –
我已经编辑了上面的代码,使用了我使用的所有功能 –