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:
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;
}
}
alla fine la lista non viene modificata?