copy list with arbitrary pointer