Lista a doppio scorrimento

di il
1 risposte

Lista a doppio scorrimento

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!!!

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte