Clone a linked list with a random pointer (part 2)
Cloning

I would expect from a cloning process to not modify the original instance, even if the modifications are transient and the original state is restored.
Your implementation adds nodes in the original list during the process.
After the clone is ready,
you clean up and restore the original list,
but this approach is surprising,
and a mistake could destroy the integrity of the original list.

I suggest to stick with more conventional approaches that produce a clone without modifying the original instance, for example by using an intermediary map to store the mapping of old nodes to new nodes, so that the random links can be correctly recreated.

Usability

How would you use this linked list in a program?
I see several usability issues:


The concept of a list and a node are not separated. This is confusing.
Common methods of a list are missing. How to add a node? The implementation doesn't offer an easy way to do that, users have to do that manually. They can only do that if they know the implementation, especially the linking between the nodes.


In other words, there's a total lack of encapsulation,
leading to serious usability consequences.

Conventions

Some Python conventions (PEP8) are violated, for example:


Function and variable names should use snake_case
There should be a blank line between functions of a class


There are others too. I suggest to go over PEP8 and follow the recommendations.