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