Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <fstream>
- #include <string>
- using namespace std;
- struct Tnodo {
- int info;
- Tnodo *next;
- };
- typedef Tnodo* Pnodo;
- void costruisci(Pnodo &);
- bool ricerca(int, Pnodo);
- Pnodo instesta(Pnodo, int);
- void creanodo(Pnodo &, int);
- void sposta(Pnodo &,Pnodo &, Pnodo &);
- void cancella(int, Pnodo &);
- void inserisciNodoCoda (int,Pnodo &);
- void stampa(Pnodo);
- int main(){
- int info;Pnodo L3;
- Pnodo L=NULL;
- Pnodo temp;
- cout<<"Inserisci il nodo "<<endl;
- cin>>info;
- creanodo(L, info);
- while (info != -1)
- { cout<<"Inserisci il nodo "<<endl;
- cin>>info;
- if (info != -1)
- inserisciNodoCoda(info, L);
- }
- stampa(L);
- cout<<endl;
- Pnodo L2= NULL;
- cout<<"Inserisci il nodo "<<endl;
- cin>>info;
- creanodo(L2, info);
- while (info != -1)
- { cout<<"Inserisci il nodo "<<endl;
- cin>>info;
- if (info != -1)
- inserisciNodoCoda(info, L2);
- }
- stampa(L2);
- cout<<endl;
- cout<<"Inserisci il nodo "<<endl;
- cin>>info;
- creanodo( L3, info);
- while (info != -1)
- { cout<<"Inserisci il nodo "<<endl;
- cin>>info;
- if (info != -1)
- inserisciNodoCoda(info, L3);
- }
- stampa(L3);
- cout<<endl;
- stampa(L);cout<<endl; stampa(L2);cout<<endl;stampa(L3);cout<<endl;
- system("pause");
- sposta(L, L2, L3);
- stampa(L);
- cout<<endl;
- stampa(L2);
- cout<<endl;
- stampa(L3);
- system("pause");
- }
- void costruisci(Pnodo &L){
- int item;
- if(L==NULL){
- cout<<"Inserisci il valore che vuoi per la lista: "<<endl;
- cin>>item;
- creanodo(L, item);}
- else
- for(int i=0; i<3; i++){
- cout<<"Inserisci il valore che vuoi per la lista: "<<endl;
- cin>>item;
- inserisciNodoCoda(item,L);}
- }
- Pnodo instesta(Pnodo L, int item){
- Pnodo temp;
- creanodo(temp, item);
- temp->next=L;
- return temp;
- }
- void creanodo(Pnodo &L, int item){
- L=new Tnodo;
- L->info=item;
- L->next=NULL;
- }
- bool ricerca(int i, Pnodo L){
- if(L==NULL)
- return false;
- else
- if(L->info==i)
- return true;
- else
- return ricerca(i, L->next);
- }
- void sposta(Pnodo &L,Pnodo &L2, Pnodo &L3){
- Pnodo aux, aux2, aux3, temp;
- aux = L; // Puntatore alla testa di L1
- aux2 = L2; // Puntatore alla testa di L2
- temp = NULL; // Temp per fare switch e free degli elementi comuni
- while (aux != NULL){ //Inizio a scorrere la lista (finché essa non è vuota)
- while (aux2 != NULL){ //Scorro anche la seconda lista, finché anch'essa non è vuota
- if (aux->info != aux2->info) aux2 = aux2->next; // Se il valore di aux (elemento n-esimo della lista L1) non è uguale al valore di aux2 (elemento n-esimo della lista L2), passo al valore successivo della lista L2)
- else {temp=aux;
- aux=aux->next;
- L=aux;
- cancella(temp->info, L2);
- if(L3==NULL){
- creanodo(L3, temp->info );}
- else{
- inserisciNodoCoda ( temp->info,L3);
- }
- } //Sposto val da l1 a l3 e lo elimino da l2
- }
- aux2 = L2; // Ritorno alla testa, così posso riscorrere la coda per controllare se il valore dell'elemento n-esimo+1 di L1 è presente in L2
- if(aux !=NULL)
- aux = aux-> next; // Passo all'elemento successivo di L1 da confrontare in L2
- }
- }
- void cancella(int item, Pnodo &L2){
- Pnodo temp;
- if (L2 != NULL){
- if(item == L2->info){
- temp=L2;
- L2=L2->next;
- delete temp;
- }
- else
- cancella(item, L2->next);
- }}
- void stampa(Pnodo L){
- while(L != NULL){
- cout<<L->info<<" ";
- L=L->next;
- }}
- void inserisciNodoCoda ( int info1,Pnodo &L)
- {// inserisce un nuovo nodo in coda alla lista
- Pnodo prec, curr;
- if (L==NULL)
- creanodo(L, info1);
- else {
- curr=L; prec=NULL;
- while (curr!=NULL) {
- prec=curr;
- curr=curr->next;
- }
- creanodo(prec->next, info1);
- }
- }
Add Comment
Please, Sign In to add comment