Buona domenica a tutti,
vorrei porre alcune domande sulle liste in c.
1)Se volessi cercare di fare un controllo se una lista è palindroma come potrei fare (qui la funzione è appena abbozzata)
2)come posso far scorrere all' indietro gli elementi di una lista (penso con prev,ma non so come "imporlo",devo partire ovviamente dal fondo?)
3)se volessi andare avanti di un tot di elementi rispetto ad un altro come devo mettere (
lis= lis->next *2) ?Penso sia ovviamente sbagliato ad esempio lis= lis->next->next funziona,ma se dovessi andare avanti di tanto?
codice:
#include <stdlib.h>
#include <stdio.h>

typedef struct nod {
        int data;
        struct nod *next;
} node;

node *newnode(void)
{
   return (node *)malloc(sizeof(node));
}


node *buildlis()
{
int x;
node *lis, *p, *last;
printf("nuovo numero da inserire in lista:\n");
scanf("%d", &x);
if (x<=0)
lis= NULL;
else
{

last=newnode();
lis = last;
last->data = x;
last->next = NULL;
printf("nuovo numero da inserire in lista:\n");
scanf("%d", &x);
while (x>0)

{
p=newnode();
p->data = x;
p->next = NULL;
last->next = p;
last = p;
printf("nuovo numero da inserire in lista:\n");
scanf("%d", &x);
}
}
return(lis);
}

void printlis(node *lis)
{
     node* tmp;

     tmp = lis;
     int somma=0;float media=0;int conteggio=0;
     printf("\nlista risultato\n");
     while (tmp != NULL) {
           printf(">>>> %d\n", tmp->data) && (somma=somma+tmp->data) && (conteggio=conteggio+1) ;
           tmp = tmp->next;

     }
    printf("Somma %d\n",somma);
    printf("Conteggio %d \n",conteggio);
    media=(somma/conteggio);
    printf("Media %f",media);
}


void myFree ( node* top )
{
    node* tmp;
    tmp = top;

    while ( top->next != NULL ) {
          tmp = top->next;
          free(top);
          top = tmp;
    }
}


int calcola(node *l){
    node *p,*head,*tail;int m=0;
    head=NULL; tail=NULL;
    while (l !=NULL){
        (m=m+1) ,l=l->next;}
        return(m);}

void palindroma(node *lis)
{
    node *p,*head,*tail;int x=1;int y=4;
    head=NULL; tail=NULL;int pos=1;
    int lun=0;
    lun=calcola(head);
    while (lis != NULL)
{
    if (pos == x )
{
    printf(">>>> %d\n", lis->data);
    pos++;}
    else
{   pos++; lis= lis->next;}
}

}



int main()
{
    node* heada;
    int n;int m=6;int b=5;
    heada = buildlis (  );
    printf ("\n-----STAMPA A-----\n");
    printlis(heada);
    int ca=0;ca=calcola(heada);
    printf ("\n-----A %d-----\n",ca);
    palindroma(heada);
    myFree ( heada );
    return 0;
}