Trocar nós em uma lista vinculada

stou tentando trocar dois nós adjacentes em uma lista vinculada e acho que entendo a idéia de como fazê-lo usando um nó temporári

Aqui está minha função de troca de estrutura

struct part {
   char* name;
   float price;
   int quantity;
   struct part *next;
};
typedef struct part partType;

partType *swap_node(partType **item) {

  partType *temp;
  temp = *item;
  *item = (*item)->next;
  temp->next = (*item)->next;
  (*item)->next = temp;
  return *item;
}

Não consigo pensar em como fazer com que o nó anterior na lista aponte para o novo nó trocado. Preciso de outra variável temporária? Além disso, como explico o caso de os dois nós a serem trocados serem os dois primeiros da list

questionAnswers(10)

yourAnswerToTheQuestion