Lista odwrócona C

0

Witam,
napisałem program który wyświetla elementy listy w sposób normalny i odwrócony : )
niestety w tym drugim przypadku pierwszy element nie chce się przenieść na koniec listy
mógłby mnie ktoś nakierować co muszę zrobić żeby działało : ) ?

#include <stdio.h>
#include <stdlib.h>

typedef struct element element;

struct element
{
   int x;
   struct element *next;
};


void dodaj(element **lista, int y)
{
     element *e, *tmp;
     
     e = malloc(sizeof(element));     
     e->x=y;

     if (*lista == NULL)     
      {
        e->next = *lista;
        *lista = e;
      }
      else
       { 
         tmp = *lista;
         while (tmp->next != NULL)
            tmp=tmp->next;          
            tmp->next = e;
            e->next = NULL;  
       }
}

void wyswietl(element *lista)
{
   printf("\n\n");
   while(lista)
   {
     printf("[ %i ] ->", lista->x);
     lista=lista->next;
   }
   getchar();
}     

void odwroc (element *head){
    element *a=head->next; // aktualny
    element *p=NULL; // poprzedni
    element *n=NULL; // nastepny
    
    while (a!=NULL){
        n=a->next;
        a->next=p;
        p=a;
        a=n;    
    }
    head->next=p;
}

main ()
{
     element *lista, *e;
     int i, k,n;
     
     lista=NULL;
     
     printf("Ile liczb chcesz dodac do listy: ");
     scanf("%i", &n);
     for (i=0; i<(n); i++)
     {
       printf("Podaj liczbe: \n");
       scanf("%i", &k);
       dodaj(&lista, k);
     }
     wyswietl(lista);
     odwroc(lista);
     wyswietl(lista); 
     getchar();     
}
0

Odwracania z całą pewnością zmienia pierwszy element (bo pierwszym staje się ostatni).
Nagłówek void odwroc (element *head) już nam mówi że to "odwracanie" nie zmieni pierwszego elementu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1