Non so cosa devi fare di preciso, ma i casi sono due.

Se dichiari n come una variabile di tipo nodo devi fare :
codice:
typedef struct
{
	char *nome;
	int  id;
} NODO;

int nuovo_nodo( NODO *n, char *name, int x)
{
	n->nome = (char *)malloc(sizeof(char) * strlen(name)+1);
	strcpy(n->nome, name);
	n->id = x;
	return 0;
}

int main()
{
	NODO n; /* <<<< Attenzione  */
	nuovo_nodo( &n, "prova", 6);
	printf("nome del nodo: '%s'\tid: %d\n", n.nome, n.id);

	return 0;
}
Se dichiari n come un puntatore al tipo nodo :
codice:
typedef struct
{
	char *nome;
	int  id;
} NODO;

int nuovo_nodo( NODO **n, char *name, int x)
{
	if( (*n) )
		free( *n );
	(*n)= (NODO*)malloc(sizeof(NODO));
	if( (*n) )
	{
		(*n)->nome = (char *)malloc(sizeof(char) * strlen(name)+1);
		strcpy((*n)->nome, name);
		(*n)->id = x;
		return 1;
	}
	return 0;
}

int main()
{
	NODO *n=NULL; /* <<<< Attenzione  */
	nuovo_nodo( &n, "prova", 6);
	printf("nome del nodo: '%s'\tid: %d\n", n->nome, n->id);

	nuovo_nodo( &n, "Nuovoa prova", 6);
	printf("nome del nodo: '%s'\tid: %d\n", n->nome, n->id);

	return 0;
}