E' undefined behavior, il fatto che funzioni è un puro caso.
E' diverso avere un puntatore ad un oggetto e un puntatore ad un puntatore ad un oggetto.
Si parte sempre da quello che si può correggere e si sa come correggere
A dire il vero list è diventato (*d), p è rimasto p (concettualmente), ha solo cambiato tipo.
Il Sì e No voleva dire: si puoi farlo, ma devi stare attento alle modifiche che apporti nelle variabili di main e comunque nel tuo caso non potresti farlo perché (*d) ti serve per tenere traccia della testa della lista circolare.
Sì ti basta cambiare il valore di (*d).
Prova a correggere cancella alla luce di quello che ho detto e quello che hai capito da te.