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 ...