I'd suggest looking into a physics library/engine like Box2D or bulletphysics.
If your primary interest is getting the circles to behave like pucks on ice, then just add the library to your project to have the collision handling - including the frictional responses (that deal with spin) - done for you.
If learning about handling the physics is your primary goal, then take a look at the library's documentation, tutorials, white papers, and/or source code. You'll probably want to focus on material related to continuous collision detection (CCD).
In Box2D for instance, there's:
- Code for generating a collision description (code related to the
- Code for dealing with resolving positional overlap (like in
- Code for dealing with resolving velocity responses (see
- Code for calculating an upcoming time of impact (see
Depending on how realistic you want your collisions to look, you may need to learn about all of these things and more.
Note that realism is typically at the expense of loss of performance. This shows up in terms of how many frames can be simulated and rendered per second. So a compromise has to be struck between these.