C (gcc), 114 112112 109 bytes
f(n,s){int i[19]={};for(s=n/10,n%=10;i[s]-n;n+=n>9?-9:s%10,s=i[s])i[s]=n;do printfi[s]=n;for(;printf("%d ",s);while(,i[s=i[s]]-nn;);} -3 from ceilingcat
Includes a trailing space.
f(n,s){ int i[19]={}; //re-initialize edges uponfor each call for(s=n/10,n%=10; //initialize from input i[s]-n; //detect loop when an edge s->n repeats n+=n>9?-9:s%10,s=i[s])i[s]=n; //step do printffor(;printf("%d ",s);while(,i[s=i[s]]-nn;); //output loop }