That's a neat one.  My solution: pointers A, B, and C.  A proceeds through the list.  B is always at the largest multiple of k that is at or before A.  C is at B-k.  Every k steps, set C=B and B=A.  When A reaches the end, step C forward B-A times.