PDA

View Full Version : [C] MergeList...k nn funziona


leadergl
25-11-2005, 18:39
raga devo effettuare la fusione di due liste ordinate in un'unica lista...ho scritto la funzione ma non so perchè il risultato finale non è quello corretto...in particolare mi restituisce una o l'altra lista...senza fare la fusione:


#include <stdio.h>
struct tipolista
{
int elem;
struct tipolista *next;
};

#define lista struct tipolista

//fonde due liste ordinate in una sola ordinata (con ripetizioni)
lista *mergeList_iter(lista *top1, lista *top2)
{

lista *testa; //puntatore alla testa della lista
lista *link; //puntatore all'elemento da collegare a
//top1 o top2 a seconda di chi è il minore

if (top1==NULL)
return top2;
else if (top2==NULL)
return top1;
else
{
if (top1->elem<=top2->elem)
{
testa=top1;
link=testa;
top1=top1->next;
}
else
{
testa=top2;
link=testa;
top2=top2->next;
}
}

while ((top1==NULL) && (top2==NULL))
{
if (top1->elem<=top2->elem)
{
link->next=top1;
top1=top1->next;
link=link->next;
}
else
{
link->next=top2;
top2=top2->next;
link=link->next;
}
}

if (top1==NULL)
link->next=top2;
else
link->next=top1;

return testa;
}

in cosa sbaglio?

io è da poco che sto usando il C..ho sempre programmato in Pascal e VB...quindi non so bene come gestire i puntatori ed altre cosette in C...help me...

kk3z
25-11-2005, 18:54
questo ciclo

while ((top1==NULL) && (top2==NULL))

non funziona mai, il while continua fino a quando la condizione non è false, ma con il tuo ciclo (ed essendo top1 e top2 != NULL per le condizioni precedenti) è come se facessi

while (FALSE && FALSE)

cioè while (FALSE)

e quindi non comincia mai.
La soluzione corretta è

while ((top1 != NULL) && (top2 != NULL))

leadergl
25-11-2005, 18:58
cavolo hai ragione :p
che idiota non l'avevo notato, ti ringrazio...ovviamente adesso funziona tutto :D

beppegrillo
25-11-2005, 19:22
cavolo hai ragione :p
che idiota non l'avevo notato, ti ringrazio...ovviamente adesso funziona tutto :D
Prevete ti osserva :mbe:

leadergl
25-11-2005, 21:15
Prevete ti osserva :mbe:
:D wow...fai il mio stesso corso? o magari sei il mio prof?! :p

in ogni caso ho risolto ed ho fatto tutto l'esercizio ;) devo dare una sistemata al main()