After you issue the following statement
Node* runner = head->next;
'runner' points to address memory pointed by 'next' (let's say it is address 0x6543).
(head->next) ------> content <----(runner)
The following two lines:
Node* reversedList = head;
reversedList->next = nullptr;
So, 'next' points to NULL now, but 'runner' still points to the address previously pointed by 'next', i.e., 0x6543.
(head->next) --> NULL | content <-------- (runner)
The second example works because first you make head->next points to NULL then you make 'runner' points to head->next, that now is NULL. As 'head' and 'reversedList' both points to same address the second example -- without reversedList -- would be:
head->next = nullptr;
Node* runner = head->next;