Prima di entrare nel problema, mi sembra strana la dichiarazione della struttura
struct node ...
seguita da
typedef struct node *node;
ovvero dai alla struttura lo stesso nome del nuovo tipo di dato che e' il puntatore alla struttura stessa ... e questo non va bene ... non so quale compilatore te lo ha compilato ma, se lo ha fatto senza errori, ti consiglieri di passare ad un altro ...
Per il resto, se la funzione deve accettare un puntatore alla struttura, allora non puoi allocarla internamente e restituirne il puntatore perche' ci vorrebbe un doppio puntatore come parametro. Non ti resta quindi che allocarla esternamente e fornirne il puntatore alla funzione per l'assegnazione dei valori ...