Ho ancora un problema sulle liste,con 2 liste se volessi fare
l1 1->2->3->4->6->7
l2 8->9->10->11->12
la lista risultante sarà tutti gli elementi in pos compresa tra 2 valori,es
2->9->3->10->4->11
ma nella funzione lascio sicuramente dietro qualcosa perchè si blocca...
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;int z=0; 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 { last=newnode(); lis = last; last->data = x; last->next = NULL; printf("nuovo numero da inserire in lista (00000 per terminare):\n"); scanf("%d", &x); z=z+1; while (x!=00000) { 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); z=z+1; } } if (z>0) printf("Il valore e' %d\n",z); if(z==0) printf("|||||-----lista vuota-----|||||\n"); 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) ; tmp = tmp->next; } } void myFree ( node* top ) { node* tmp; tmp = top; while ( top->next != NULL ) { tmp = top->next; free(top); top = tmp; } } int conteggio(node *lis) { int acc=0; while (lis != NULL) { acc=acc+1; lis=lis->next; } return(acc); } node* moltiplica(node *l1,node *l2) { node *p,*head,*tail; head=NULL;int n=0;int pos=1; if((l1==NULL) && (l2==NULL)) return NULL; while ((l1!=NULL) && (l2!=NULL)){ if(pos>2){ if (n%2!=0) { p=newnode(); p->data=l1->data; p->next=NULL; if(head==NULL){head=p,tail=p;} else{tail->next=p;tail=tail->next;} l1=l1->next; n++; } if (n%2==0) { p=newnode(); p->data=l2->data; p->next=NULL; if(head==NULL){head=p,tail=p;} else{tail->next=p;tail=tail->next;} l2=l2->next; n++; } pos++;} } return head;} int main() { node* head;node* head2;node *dup; 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-----CONTROLLO-----\n"); dup=moltiplica(head,head2); printlis(dup); if(head==NULL) printf ("\nNESSUN RISULTATO ESPRIME I VALORI VOLUTI\n"); free ( head ); return 0; }

Rispondi quotando