Le due istruzioni portano a due risultati simili ma diversi: con la prima crei un puntatore a cui assegni il valore NULL. Con la seconda crei un puntatore che conterrà un valore casuale.
Le due righe possono essere considerate equivalenti se poi consideri che dovrai creare gli elementi della lista (es attraverso una malloc) e che quindi dovrai assegnare loro un valore:
first = (struct node*) malloc(sizeof(struct node));
In questo caso non importa se hai creato "first" nel primo modo o nel secondo..