Troque nós em uma lista vinculada individualmente

Eu estou tentando trocar dois nós. Por exemplo, se os nós sãoa eb Eu estou passando os ponteiros
(a-1)->next e(b-1)->next que são basicamente nósa eb.

void swap(struct stack **a,struct stack **b)
{
    struct stack *temp1 = *a, *temp2 = *b, *temp3 = *b;      
    *a = *b; 
    (*b)->next = (temp1)->next;
    temp2 = temp1;
    (temp2)->next = temp3->next;
}

O que estou fazendo de errado? Quando estou tentando imprimir os nós depois de chamar a função, é um loop infinito. Por favor ajude.

questionAnswers(3)

yourAnswerToTheQuestion