il cambia è errato..

essendo linked list ti serve il puntatore anche al nodo precedente a n1 sennò sballi il link se esiste un precedente

codice:
bool cambia(nodo* n0, nodo *n1, nodo*n2) {
  if ( n1 && n2 && n0 ) {
    n1->next = n2->next;
    n0->next = n2;
    n2->next = n1;   
    return true;
  }
  else if(n1 && n2)
  {
      n1->next = n2->next;
      n2->next = n1;
      return true;
  }
  else
    return false;
}