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...
#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...