One is a pointer passed by reference, the other is a pointer passed by reference-to-const. The body of recursiveCopy() is allowed to modify the value of to, e.g. to reassign it to point at another ListNode, but not allowed to modify the value of from.
When do functions need a const at the end of it?
When they don't modify any member objects of *this (or only modify the member objects labeled mutable)