Wè gente. Vi espongo brevemente il problema.Devo costruire una lista da tastiera (ok, fatto), renderla circolare (ok, fatto) e deallocare un elemento. Ho provato, modificando i vari puntatori .. e provato a stampare la nuova lista, ma alchè il programma sbrocca.
Inizia a scrivere infinite volte un numero a caso ..
#include <cstdlib>
#include <iostream>
using namespace std;
struct elem {
int info;
elem* next;};
void circo (elem* l);
void deall (int n, elem* l);
int main(int argc, char *argv[]) {
int x,n;
char r,s,v;
elem* l=0;
elem* aux;
elem* aux1;
aux=new elem;
cout << "Inserisci il valore info dell'elemento: ";
cin >> x;
aux->info=x;
aux->next=0;
l=aux;
cout << "Desideri continuare? (Y/N) ";
cin >> r;
while (r=='Y') {
aux=new elem;
cout << "Inserisci il valore info dell'elemento: ";
cin >> x;
aux->info=x;
aux->next=l;
l=aux;
cout << "Desideri continuare? (Y/N) ";
cin >> r;}
cout << "Desideri rendere circolare la lista? (Y/N) ";
cin >> s;
if (s=='Y') circo(l);
aux1=l;
while (aux1->next != l) aux1=aux1->next;
aux1=aux1->next;
cout << "E' circolare, difatti il primo elemento della lista e': " << aux1->info <<".\n";
cout << "Desideri deallocare la lista? (Y/N) ";
cin >> v;
if (v=='Y') deall (n, l);
aux=l;
cout << "La nuova lista e' la seguente: ";
while (aux->next != l) cout << aux->info;
system("PAUSE");
return EXIT_SUCCESS;
}
void circo(elem* l) {
elem* aux;
aux=l;
while (aux->next != 0) aux=aux->next;
aux->next=l;}
void deall(int n, elem* l) {
int i=0;
int j=(i-1);
elem* aux=l;
elem* aux1=l;
cout << "Inserisci l'elemento n da deallocare: ";
cin >> n;
for (i=0; i<=n; i++)
aux=aux->next;
for (j=0; j<=(n-1); j++)
aux1=aux1->next;
aux1->next=aux->next;
delete aux;
return;}
---
Secondo me il problema 'sta nel void deall (i passaggi precedenti fungono: la lista viene scritta e resa circolare per bene) .. però non ci riesco a sortir le gambe.
Sarò eternamente grato a chi mi aiuta.