Cambio de nodos en una lista vinculada

stoy tratando de intercambiar dos nodos adyacentes en una lista vinculada, y creo que entiendo la idea de cómo hacerlo usando un nodo temporal.

Aquí está mi función de intercambio de estructura

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;
}

No puedo pensar en cómo hacer que el nodo anterior en la lista apunte al nuevo nodo intercambiado. ¿Necesito otra variable temporal? Además, ¿cómo puedo tener en cuenta el caso de que los dos nodos que se intercambiarán sean los dos primeros en la lista?

Respuestas a la pregunta(10)

Su respuesta a la pregunta