這是我的一個鏈表結構:鏈表的幫助請求
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()並且程序掛起時,一切似乎都按預期運行。 。
你看到的錯誤很可能在兩個地方之一:要麼調用這個函數的代碼,要麼代碼創建鏈接列表,你能發佈一個完全兼容的測試用例,展示你正在看到的問題嗎? –
我已經編輯了上面的代碼,使用了我使用的所有功能 –