title: How to reverse a doubly linked list in c
body: <p>How can i reverse this doubly linked list? I've tried it but whitout any result, when i call the function <code>Reverse()</code>, it set all the nodes to NULL.</p>
  
  <p>This is my first attempt on doubly linked list and i don't know if i'm doing everything the right way. 
  Any suggestions on how to make it better?</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  
  
  struct Prova
  {
    char nome[16];
    int id;
  };
  
  typedef struct Node {
    struct Prova struttura;
    struct Node * next;
    struct Node *prev;
  
  }TNodo;
  typedef TNodo* Nodo;
  
  
  
  void NuovaPrenotazione(struct Prova  p, Nodo *pp)
  {
    Nodo temp;
  
    temp = (Nodo)malloc(sizeof(struct Node));
  
    temp-&gt;struttura = p;
    temp-&gt;next = *pp;
    temp-&gt;prev = NULL;
  
    if(*pp != NULL)
    {
      (*pp)-&gt;prev = temp;
    }
  
    *pp = temp;
  
  }
  
  void LeggiPrenotazione(struct Prova * p)
  {
    printf("\nNome Cliente:");
    scanf(" %s", p-&gt;nome);
    printf("\nID:");
    scanf(" %d", &amp;p-&gt;id);
  }
  
  
  void VisualizzaPrenotazione(Nodo nodo)
  {
    Nodo temp;
    while(nodo != NULL)
    {
      temp = nodo-&gt;prev;
      if(nodo-&gt;prev == NULL)
        {
          printf("Prev = NULL\n");
        }
      else
      {
      printf("Prev:%s %d\n", temp-&gt;struttura.nome, temp-&gt;struttura.id);
      }
      printf("Curr:%s %d\n", nodo-&gt;struttura.nome, nodo-&gt;struttura.id);
      nodo = nodo-&gt;next;
    }
  
  }
  
  void Reverse(Nodo * p)
  {
    Nodo temp;
    while(*p != NULL)
    {
      temp = (*p)-&gt;prev;
      (*p)-&gt;prev = (*p)-&gt;next;
      (*p)-&gt;next = temp;
      *p = (*p)-&gt;next;
    }
  
  
  }
  
  
  int Menu()
  {
    int scelta;
  
    printf("*** M E N U ***\n"
       "1 - Nuova prenotazione\n"
       "2 - Stampa prenotazioni\n"
     "3 - Reverse\n"
     "0 - Esci\n"
    "Scelta --&gt; ");
    scanf(" %d", &amp;scelta);
  
    return scelta;
  }
  
  
  
  int main()
  {
    int scelta;
    struct Prova test;
  Nodo lista = NULL;
    do {
      scelta = Menu();
  
      switch (scelta)
      {
        case 1:  LeggiPrenotazione(&amp;test);
                 NuovaPrenotazione(test, &amp;lista);
        break;
        case 2: VisualizzaPrenotazione(lista); break;
        case 3: Reverse(&amp;lista); break;
        default: scelta = 0;
      }
  
    } while (scelta != 0);
  
    return 0;
  }
  </code></pre>
  
  <p>I will improve my question based on your suggestions. Any help would be appreciated.</p>