Ciao a tutti! Sto facendo un esercizio che mi chiede di codificare un numero tramite una lista, e i nodi di questa lista devono essere i fattori primi del numero ordinati dal più grande al più piccolo. Ho scritto tutto il programma e l'unico problema è che non mi ritorna il puntatore al primo elemento della lista. Vi posto il codice:
codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int num;
struct node *next;
}list;
list *ordina(list *);
list *scomposizione(int n, list *);
void stampa_lista(list *);
// Qui è il mio problema
list *scomposizione(int n, list *l)
{
int j;
j = 2;
do
{
list *p = l;
if(n % j == 0)
{
p = malloc(sizeof(list));
p->num = j;
n = n / j;
p = p->next;
}
else
j++;
}
while (n > 1);
return l;
}
// la funzione ordina svolge il suo compito in modo corretto
list *ordina(list *l) {
int k;
if (l && l->next) {
do {
list *punt = l;
k = 0;
while (punt->next) {
list *punt1 = punt;
punt = punt->next;
if ((punt1->num) < (punt->num)) {
int tmp = punt1->num;
punt1->num = punt->num;
punt->num = tmp;
k = 1;
}
}
} while (k != 0);
}
return l;
}
void stampa_lista(list *l)
{
while(l != NULL)
{
printf("%d ", l->num);
l = l->next;
}
printf("\n");
}
int main()
{
int a;
list *l1 = NULL;
printf("Inserisci numerO:\n");
scanf("%d",&a);
scomposizione(a, l1);
ordina(l1);
stampa_lista(l1);
return 0;
}