Ho notato che il mio errore era nel while:
facevo:
[CODE]
while (temp != NULL)
[CODE]
anzichè:
codice:
while (temp->link !=NULL)
ricky cortesemente mi puoi spiegare per bene perchè così?
perchè questo non va bene?
codice:
lista addElem(lista *&head, int elemento){

lista *temp, *prev, *new_node;

if(head==NULL){
  head->value=elemento;
  head->link=NULL;
} else {
  temp=head;
  while(temp->link != NULL){
      prev=temp;
      temp=temp->link;
  }
 new_node=new lista;
 new_node->value=elemento;
 new_node->link=NULL;
 prev->link=new_node;
}
poi perchè si deve fare obbligatoriamente *&head?