Como reverter uma lista vinculada individualmente usando apenas dois ponteiros?

Eu me pergunto se existe alguma lógica para reverter uma lista vinculada de forma simples usando apenas dois ponteiros. O que se segue é usado para inverter a lista encadeada único usando três ponteiros nomeadamente p, q, r: struct node { int data; struct node *link; }; void reverse() {...