Somma successori

/*[Somma Successori]. Scrivere una funzione che prese in input una
lista di interi, sommi al valore intero dell’elemento della lista la somma dei valori
interi degli elementi seguenti nella lista.*/

#include
#include

struct nodo{

int elem;
struct nodo *next;
};

typedef struct nodo L_ELEM;
typedef struct nodo *L_PTR;


void stampa_lista(L_PTR p);
L_PTR inserisci_in_coda(L_PTR L, int val);
L_PTR inverti_lista(L_PTR L);
L_PTR somma(L_PTR L);


int main()
{
L_PTR startPtr = NULL;
int k=0;
int val=0;
int z=0;
scanf("%d",&k);
z=k;
while(k>0)
{
scanf("%d",&val);
startPtr = inserisci_in_coda(startPtr, val);
k--;
}
if (z!=0)
{
startPtr = inverti_lista(startPtr);
startPtr = somma(startPtr);
startPtr = inverti_lista(startPtr);
}
stampa_lista(startPtr);
system("pause");
return 0;
}

void stampa_lista(L_PTR p) {
while (p != NULL) {
printf("%d ", p->elem);
p = p->next;
}
return;
}

L_PTR inserisci_in_coda(L_PTR L, int val)
{
L_PTR curr,temp;
curr=L;
temp = malloc(sizeof(L_ELEM));

if(temp != NULL)
{
temp->elem = val;
if (L==NULL)
{
temp->next = NULL;
curr=temp;
}
else
{
while(L->next != NULL )
L=L->next;
temp->next=L->next;
L->next= temp;
}
return curr;
}
else return NULL;
}


L_PTR inverti_lista(L_PTR L)
{
L_PTR temp;
if ((L==NULL) ||(L->next == NULL))
return L;
else
{
temp=inverti_lista(L->next);
L->next->next=L;
L->next=NULL;
return temp;
}
}

L_PTR somma(L_PTR L)
{
L_PTR prev,curr,tempPtr;

curr=L;
prev=curr;
if (curr->next == NULL)
return L;
else
while(curr != NULL)
{
prev=curr;
curr=curr->next;
if (curr == NULL)
return L;
curr->elem = prev->elem + curr->elem;
}
return L;
}

Commenti