Each night it's the toss of a coin that determines the final casting of Robert Icke's cooly brilliant production of Friedrich Schiller's play. As Lia Williams, Juliet Stevenson and the rest of the company look on, a coin is spun and one of the two leads calls it. Whoever gets heads gets to keep her head: she plays Elizabeth (the night I watched it was Williams). The other frowns slightly as she prepares for the imprisoned sister-queen.

The coin spin is a smart reminder of one of the play's central motifs: that life, death and everything inbetween is determined by the tiniest vibrations, the tiniest changes, the tiniest moments. It's the butterfly effect: had someone done something slightly different in the story of Mary Stuart and Elizabeth I, could their fates – and thereby the fate of England as we know it – have ended up very different?

Though Mary Stuart is based on historical events – the ending of course can't be changed – watching it you feel as though it could go either way. The piece details what happened when Elizabeth I is pushed to make a decision about what to do with her cousin Mary who she has had imprisoned for 19 years. Mary Stuart's arrival in England was a clear threat to Elizabeth's reign: Elizabeth fought hard for the throne having been pronounced illegitimate by Henry VIII, whereas many saw Mary Stuart as being the rightful heir.

Icke's production transfers to the West End following a successful run at the Almeida in 2016. And it returns with Hildegard Bechtler's same simple set – a raised revolve in the centre of the stage, which in the many debate scenes acts as a kind of bull ring – and the same bare brick walls. Icke's adaptation is robust and beautifully filleted: Schiller's play is very, very wordy but Icke's version slides through the text, focusing beautifully and bringing out the two parts at the piece's centre. They emerge here as two hugely meaty roles for women. The only mis-step, for me, was that the length of Mary's imprisonment was slightly glossed over. The fact that Elizabeth had been umming and ahhing about Mary's fate for 19 years is key to the tragedy of the final act.

And both Williams and Stevenson – who have, rather incredibly, learnt the lines for each character – give these parts their all. Stevenson's Mary is hard and strong but beguiling; she emanates the charm and grace that inspires Mortimer to commit treason for her. While Williams, in a velvet suit with big white cuffs and dark eye make-up, has a kind of punky sass as Elizabeth I. She's volatile, throwing punches and slaps at her advisers: the sort of hits which probably hurt a bit, but who's going to complain to this queen? Williams is a lot of fun to watch as she stalks the stage in clumpy heels and makes her court bow to the ground with just the click of her fingertips.

Here Mary and Elizabeth are pitched as mirror images of each other. Both are queens, each are remorselessly strong, with piercing intellects, but Icke's production also betrays how shackled they are. This is a play about imprisonment: though Elizabeth and Mary may have been confidantes in another time and place – here each are forced into their positions. Elizabeth may be queen but politics and power means she cannot let her cousin go.

There's a strong ensemble supporting the two leads. Rudi Dharmalingam is a quietly fanatical Mortimer and the way he is barely able to go near Mary despite his obsession with her is horribly unnerving. Elliot Levey's simpering, nasal Burleigh – desperate to be rid of the Stuart threat – is a treat, as is John Light's flip-flopping Leicester, whose betrayal of both queens – on a romantic and political level – hits home how few allies the women really have.

Where most of the play leads through Schiller's beautifully crafted debates, in the final scene Icke dives in for something visual and it is an arresting and moving moment. The crown to this brilliantly adapted, directed and acted version of one of the best plays ever written.

Mary Stuart runs at the Duke of York's until 31 March.