Ho 2 liste e vorrei fargli controllare (tramite una funzione) se contengono gli stessi elementi,e che mi ritorni 1 se è così ,0 viceversa
es l1 1--2--3
l2 3--2--1 mi ritorni 1 perchè gli elementi sono gli stessi,solo in ordine diverso
codice:
#include <stdlib.h>
#include <stdio.h>

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

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

/* Dato un intero n>0, costruisce la lista di nodi da 1 ad n */
node *buildlis()
{
int x;
node *lis, *p, *last;
printf("nuovo numero da inserire in lista:\n");
scanf("%d", &x);
if (x==00000)
lis= NULL; /* caso di lista vuota */
else
{
/* inserzione del primo elemento in una lista */
last=newnode();
lis = last;
last->data = x;
last->next = NULL;
printf("nuovo numero da inserire in lista (00000 per terminare):\n");
scanf("%d", &x);
while (x!=00000)
/* Invariante: lis punta alla lista con tutti gli interi finora letti, tranne l'ultimo, e last punta all'ultimo nodo di tale lista */
{
p=newnode();
p->data = x;
p->next = NULL;
last->next = p;
last = p;
printf("nuovo numero da inserire in lista (00000 per terminare):\n");
scanf("%d", &x);
}
}
return(lis);
}


/* Stampa degli elementi di una lista */
void printlis(node *lis)
{
     node* tmp;

     tmp = lis;
     int somma=0;float media=0;int conteggio=0;

     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 uguali(node *l1,node *l2)

{
int vl=0;
int ug=0;

   while((l1!=NULL) &&(l2!=NULL)) {
        if (l1->data==l2->data){
        ug=ug+1;
        vl=vl+1;
        }else (vl=vl+1);

        l2=l2->next;l1=l1->next;
    }



     printf("\nvalori %d e uguali %d",vl,ug);
        if(vl==ug) return 1;
        else return 0;

    }








int main()
{
    node* head;node* head2;
    int m=6;
    printf ("-----LISTA A-----\n");
    head = buildlis (  );
    printf ("-----LISTA B-----\n");
    head2 = buildlis (  );

    printf ("\n-----STAMPA LISTA A-----\n");
    printlis(head);
    printf ("\n-----STAMPA LISTA B-----\n");
    printlis(head2);

    printf ("\n-----STAMPA LISTA A MODIFICATA-----\n");
    int n=3;int uguale=0;
    uguale=uguali(head,head2);
    if(uguale==1)printf("\nUguali ");
    else printf("\nDiversi ");
    myFree ( head );
    return 0;
}