C ++ diferencia entre ** y * y en el paso de parámetros

He implementado operaciones en una lista, una de ellas es agregar, y como no quiero devolver nada, leí que tenía que usar **, y funciona, pero vi en otro lugar que se pasa como * &, pero no sé la diferencia

addNode (nodo * y cabeza, valor int) addNode (nodo ** cabeza, valor int)

¿Cuál es la diferencia y cuál es mejor, o significan lo mismo? Sé que el segundo es puntero a puntero.

Gracias