Si ferma aspettando (apparentemente) qualcosa. Come quando una scanf aspetta un valore.
L'intero codice è questo:
codice:
 
struct s_info
{
	char nome[15];
};
typedef struct s_info t_info;
struct s_node
{
	t_info info;
	struct s_node* link;
};
typedef struct s_node t_node;
typedef t_node* t_list;
t_info read_info();
t_list list_insert(t_list,t_info);
t_list list_create();
t_node* node_create(t_info);
bool greater(t_info,t_info);
bool equal(t_info,t_info);
t_list node_delete(t_list lista,t_info inf)
{
	t_node* prec=NULL;
	t_node* curr=lista;
	while((curr!=NULL) && greater(inf,curr->info))
	{
		prec=curr;
		curr=curr->link;
	}
	if(curr!=NULL && equal(inf,curr->info))
	{
            
	    if(prec==NULL)
		{
			lista=curr->link;
		}
		else
		{
			prec->link=curr->link;
		}
		free(curr);
		return lista;
	}
	return lista;
	
}
void print_list(t_list);
void print_info(t_info);
//MAINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
t_list inverti_lista(t_list);
int main()
{
	int scelta=1;
	t_list lista;
	t_info inf;
	lista=list_create();
	while(scelta!=0)
	{
		inf=read_info();
		lista=list_insert(lista,inf);
		printf("Vuoi inserire un altro elemento? 1/0 \n");
		scanf("%d",&scelta);
	}
	printf("La lista letta e' : \n");
	print_list(lista);
	printf("Inserire il nome da cancellare\n");
	inf=read_info();
	lista=node_delete(lista,inf);
	printf("La lista dopo la cancellazione:\n");
	print_list(lista);
	lista=inverti_lista(lista);
	printf("Lista invertita:\n");
	print_list(lista);
    return EXIT_SUCCESS;
}
//FINE MAINNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
t_info read_info()
{
	t_info inf;
	printf("Inserire il nome\n");
	scanf("%s",inf.nome);
	return inf;
}
t_list list_insert(t_list lista,t_info inf)
{
	t_node* new;
	t_node* prec=NULL;
	t_node* curr=lista;
	while(curr!=NULL && greater(inf,curr->info))
	{
		prec=curr;
		curr=curr->link;
	}
	new=node_create(inf);
	if(new==NULL) exit(1);
	if(prec==NULL)
	{
		new->link=lista;
		return new; 
	}
	else
	{
		prec->link=new;
		new->link=curr;
		return lista;
	}
		
	
}
t_list list_create()
{
	return NULL;
}
t_node* node_create(t_info inf)
{
	t_node* node;
	node=(t_node*)malloc(sizeof(t_node));
	if(node==NULL)
	{
		printf("Errore nell'inserimento del nodo\n");
		return NULL;
	}
	else
	{
		node->info=inf;
		node->link=NULL;
		return node;
	}
}
bool greater(t_info info1,t_info info2)
{
	if(strcmp(info1.nome,info2.nome)>0)
	return true;
	else
	return false;
}
void print_list(t_list lista)
{
	printf("sono dentro");
	t_node* curr=lista;
	while(curr!=NULL)
	{
		print_info(curr->info);
		curr=curr->link;
	}
}
void print_info(t_info inf)
{
	printf("%s   ", inf.nome);
}
bool equal(t_info info1,t_info info2)
{
	if(strcmp(info1.nome,info2.nome)==0)
	return true;
	else
	return false;
}
t_list inverti_lista(t_list lista)
{
	printf("sono dentro");
	t_node*curr;
	t_node*first;
	curr=lista;
	first=lista;
	while((curr->link)!=NULL)
	{
		(curr->link)->link=curr->link;
		curr=curr->link;
	}
	first->link=NULL;
	lista=curr;
	return lista;
	
	
}
Ogni aiuto è ben accetto, grazie a tutti a prescindere per l'interessamento