ciao a tutti, premetto che sto appena capendo le liste ho provato ad implementare una lista di n elementi, ma l'output della lista che dovrebbe essere ordinata è sbagliato.
Questo è il codice:

codice:
#include<stdio.h>
#include<stdlib.h>


struct elemento{

	int info;
	struct elemento *next;
};
typedef struct elemento ELEMENTO;
ELEMENTO *crea_lista(int n);
ELEMENTO *somma(ELEMENTO*,ELEMENTO*);
void visualizza(ELEMENTO*);
void BubbleSort_lista(ELEMENTO *p,int n);

int main(){

	int n;
	scanf("%d",&n);
	ELEMENTO *punta_lista;
	punta_lista=malloc(sizeof(ELEMENTO));
	printf("Inserisci gli elementi nella 1° lista: \n");
	*punta_lista=*crea_lista(n);
	BubbleSort_lista(punta_lista,n);
	printf("\nLa lista ordinata è: \n");
	visualizza(punta_lista);


	return 0;
}

ELEMENTO *crea_lista(int n){

	ELEMENTO *p,*paus;
	int i;
	if (n==0) 
	p=NULL;
 else
      {
       // creazione del 1° nodo
	p=malloc(sizeof(ELEMENTO));
	printf("dammi l'informazine\n");
	scanf("%d",&p->info);
	paus=p;
	
      }
	for (i=1;i<n;i++){
	    paus->next=malloc(sizeof(ELEMENTO));
	    paus=paus->next;
	    printf("dammi l'informazine\n");
	    scanf("%d",&paus->info);
         }
	   paus->next=NULL;
	   
	    return p;
}

void BubbleSort_lista(ELEMENTO *p,int n){

	ELEMENTO *sort;
	if (n==0) return;  // se lista vuota esci

else{
	int flag,temp;

   do {
	flag=0;
	  for ( ;sort->next!=NULL;sort=sort->next){
		if (sort->info>(sort->next)->info){
			temp=sort->info;
			sort->info=(sort->next)->info;
			(sort->next)->info=temp;
			flag=1;
		}
	   }
    }
      while (flag);  // finchè c'è almeno uno scambio, ricomincia il ciclo
 }
}

void visualizza(ELEMENTO *p){

	printf("Punta_lista---->");
	while (p!=NULL){
	   printf(" %d ",p->info);
	   p=p->next;
	 }
	   printf(" NULL ");
}
forze in questa istruzione c'è qualcosa che non va?
codice:
  for ( ;sort->next!=NULL;sort=sort->next){
Ringrazio tutti in anticipo.