Invertir una lista enlazada individualmente en C [duplicado]

Posible duplicado:
¿Cómo revertir una lista enlazada individualmente usando solo dos punteros?

Este es el código C para revertir una lista enlazada. Pero esto no está produciendo la salida deseada.

struct node *temp,*prev;
while(head->next!=NULL)
  {
    temp=prev=head;
    while(temp->next->next!=NULL)
      {
    temp=temp->next;
    prev=prev->next;
      }
    temp=temp->next;
    temp->next=prev;
    prev->next=NULL;
  }

¿Qué me estoy perdiendo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta