Ciao ragazzi, sono di nuovo qui con un problema che mi affligge. Anche questo mio esercizio parte da un listato da svolto per produrne uno nuovo.Ciò che ho già svolto è una lista a singolo scorrimento.Ho una classe Listnode che ho così definito
#ifndef LISTND_H
#define LISTND_H
template<class nodetype> class List;
template<class nodetype>
class ListNode{
friend class List<nodetype>;
public:
ListNode(const nodetype &,const int &);
nodetype getData() const;
int getExp() const;
private:
nodetype data;
int exp;
ListNode<nodetype> *nextPtr;
ListNode<nodetype> *prewPtr;
};
//Costruttore
template<class nodetype>
ListNode<nodetype>::ListNode(const nodetype &info,const int &expone):data(info),prewPtr(0),nextPtr(0),exp(expone){}
template<class nodetype>
nodetype ListNode<nodetype>::getData()const{return data;}
template<class nodetype>
int ListNode<nodetype>::getExp()const{return exp;}
#endif
[/b]
Dopo poi ho definito una classe List in questo modo
template<class nodetype>
class List{
public:
List();
~List();
void insertatfront(const nodetype &,const int&);
void insertatback(const nodetype &,const int&);
bool removefromfront(nodetype &,int &);
bool removefromback(nodetype &,int &);
bool isEmpty() const;
void print() const;
private:
ListNode<nodetype>*firstPtr;
ListNode<nodetype>*lastPtr;
ListNode<nodetype>*getnewnode(const nodetype &,const int &);
};
[/b]
Ora, le funzioni di inserimento mi funzionano bene, ed anche quella di cancellazione dall'inizio, perchè poi stampo la lista in maniera corretta.Tuttavia quando vado a fare l'eliminazione dalla fine, se il nodo è unico o la lista è vuota cancella bene, se invece ci sono due o più nodi no, nella stampa della lista infatti ciò che io mi ritrovo sono i primi stampati bene e quello che avrei dovuto cancellare invece è sostituito da 2 elementi del tipo 133665, 133650.(proprio perchè stampo sia data che exp)
template<class nodetype>
bool List<nodetype>::removefromback( nodetype &value, int &value2){
if(isEmpty()){return false;}
else{
ListNode<nodetype> *tempPtr=lastPtr;
if(firstPtr==lastPtr){
lastPtr=firstPtr=0;}
else{
lastPtr=lastPtr->prewPtr;
value=tempPtr->data;
value2=tempPtr->exp;
delete tempPtr;
return true;
}
}
}
[/b]
La mia domanda è:ho sbagliato qui qualcosa inerente ai puntatori?
Grazie a tutti i pazienti di questo forum!!!