Thread obsoleto Problema con le liste collegate

omar94

Nuovo utente
Autore del topic
12 Luglio 2009
26
0
Miglior risposta
0
Salve ragazzi.
Devo assolutamente svolgere entro stanotte questo esercizio per poterlo mandare al professore e non so più dove sbattere la testa :S

Questo programmino dovrebbe creare, data una lista passata per riferimento, un'altra lista con i valori negativi.
Il mio problema consiste nel fatto che questo fottutissimo programma mi crea la lista okay, ma ci mette dentro solo il primo valore negativo e lascia gli altri nella lista d'origine.. .-.

Vi lascio il codice così magari vedete se potete darmi una mano.. ne avrei veramente bisogno.

#include <iostream>
#include <cstdlib>
using namespace std;

struct elemento{
int valore;
elemento* succ;
};

typedef elemento* pelem;


void CreaLista(pelem & p, int & n);
void ListaNegativa(pelem & p1, pelem & p2);
void StampaLista(pelem p);
void StampaListaInv(pelem & p);

int main(){

int n;
pelem p1,p2;

CreaLista(p1,n);
ListaNegativa(p1,p2);
StampaLista(p1);
if(p2!=0) StampaListaInv(p2);
else cout<<"La seconda lista e' vuota";

return 0;
}


void CreaLista(pelem & p, int & n){

cout<<"Inserire il numero degli elementi della lista: ";
cin>>n;
if(n==0) p=NULL;

else{

p = new elemento;
pelem paux=p;
for(int i=0; i<n; i++){

paux->succ = new elemento;
paux=paux->succ;

cout<<"Inserire l'elemento di posto "<<i+1<<": ";
cin>>paux->valore;

}

paux->succ=NULL;
paux=p;
p=p->succ;
delete paux;
}

}

void ListaNegativa(pelem & p1, pelem & p2){

if(p1==NULL) p2=NULL;
else{
pelem paux,prec;
paux = new elemento;
paux->succ=p1;
p1=paux;
prec=paux;
paux=paux->succ;
p2=NULL;

while(paux!=NULL)
{
if(paux->valore<0){
prec->succ=paux->succ;
paux->succ=p2;
p2=paux;
}

prec=paux;
paux=paux->succ;
}

paux=p1;
p1=p1->succ;
delete paux;
}



}

void StampaLista(pelem p){

if (p==NULL) cout<<"La prima lista e' vuota"<<endl;
else{
cout<<"La prima lista e' formata dai seguenti elementi: "<<endl;

while(p!=NULL){
cout<<p->valore<<", ";
p=p->succ;
}
cout<<endl;
}
}


void StampaListaInv(pelem & p){ //Per riferimento altrimenti verrebbe allocata per ogni chiamata ricorsiva memoria inutilmente



if(p!=NULL){
StampaListaInv(p->succ);
cout<<p->valore<<", ";
}
else cout<<"La seconda lista e' formata dai seguenti elementi: "<<endl;

}


Vi ringrazio in anticipo per le risposte.. :bye: