ho un esercizio che dichiarato in input una lista e un vettore di n elementi,se il 1°elemento della lista è presente nel vettore allora deve creare un altro nodo contenente il valore 0 ed agganciare alla lista e restituire con la nuova testa.
esempio: L è 3 -> 2 -> 7 > 8 -> 3 e V = [7, 3, 5]
allora la funzione modifica la lista così 0 -> 3 -> 2 -> 7 -> 8 -> 3.
ecco come ho provato a fare:
alla fine la lista non viene modificata?codice:#include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> struct _elem { int info; struct _elem *next; }; typedef struct _elem Elem; typedef Elem* List; Elem *crea_lista(int n_list); List inszero(List L, int V[], int n); void visualizza(List L); int main(){ int n_list,n,i; int vett[100]; scanf("%d",&n); printf(" inserisci gli elementi nel vettore \n"); for (i=0;i<n;i++){ scanf("%d",&vett[i]); } printf("INSERISCI n_liste per definire gli elementi nella lista \n"); scanf("%d",&n_list); Elem *punta_lista; punta_lista=malloc(sizeof(Elem)); printf("Inserisci gli elementi nella 1° lista: \n"); *punta_lista=*crea_lista(n_list); Elem *modifica; modifica=malloc(sizeof(Elem)); modifica=inszero(punta_lista,vett,n); visualizza(punta_lista); return 0; } Elem *crea_lista(int n_list){ Elem *p,*paus; int i; if (n_list<=0) p=NULL; else { // creazione del 1° nodo p=malloc(sizeof(Elem)); printf("dammi l'informazine\n"); scanf("%d",&p->info); paus=p; } for (i=1;i<n_list;i++){ paus->next=malloc(sizeof(Elem)); paus=paus->next; printf("dammi l'informazine\n"); scanf("%d",&paus->info); } paus->next=NULL; return p; } List inszero(List L, int V[], int n){ Elem *p=L,*tempPtr,*curr=L; int i; if (p!=NULL){ tempPtr=malloc(sizeof(Elem)); // forze è qua l'errore????? tempPtr->info=0; // forze è qua l'errore ?????? for (i=0;i<n;i++){ if (V[i]==p->info){ // forze è qua l'errore????? curr=tempPtr; //curr punta a tempPtr // e tempPtr-> contiene l'indirizzo del prossimo elemento cioè p (primo elemento) tempPtr->next=p; } } } while (tempPtr!=NULL){ tempPtr=tempPtr->next; } return curr; //restituisco la testa } void visualizza(List L){ List p; p=L; while (p!=NULL){ printf("%d",p->info); printf("--->"); p=p->next; } }

Rispondi quotando