cpp2html 0.1-alpha © 2002 Andrea Leofreddi. To get the source click here

// 1.3: Linked list
#include <iostream>

using namespace std;

class LList {
	private:
		int dato;
		LList *next;
	public:
		// metodi di accesso
		int get_dato() { return dato; };
		void set_dato(int ndato) { dato = ndato; };

		LList *get_next() { return next; };
		void set_next(LList *nnext) { next = nnext; };

		// costruttori e distruttore
		LList()
		: next(NULL), dato(0) { };
		
		LList(int ndato)
		: next(NULL), dato(ndato) { };

		LList(LList *nnext, int ndato)
		: next(nnext), dato(ndato) { };

};

// inserisci
LList *inserisci(LList *head, int dato) {
	LList *nelement = new LList(head, dato); // alloca un nuovo elemento

	return nelement;
}

// trova
LList *trova(LList *head, int dato) {
	for(; head; head = head->get_next())
		if(head->get_dato() == dato)
			return head;

	return NULL;
}

// cancella
LList *cancella(LList *head, LList *e) {
	if(!head || !e)
		return NULL;

	LList *copyhead(head);

	if(head == e) {
		copyhead = head->get_next();
		delete e;
	} else {
		for(; head; head = head->get_next())
			if(head->get_next() == e) {
				head->set_next(e->get_next());
				delete e;
			}
	}

	return copyhead;
}

// cancella
LList *cancella(LList *head, int dato) {
	return cancella(head, trova(head, dato));
}

// stampa
void stampa(LList *head) {
	for(; head; head = head->get_next())
		cout << "Elemento @" << head << ": " << head->get_dato() << endl;
}

// main
int main() {
	LList *head(NULL);
	
	head = inserisci(head, 13);
	head = inserisci(head, 581);
	head = inserisci(head, 41);
	head = inserisci(head, 222);
	head = inserisci(head, 333);

	stampa(head);

	cout << "Cancello\n";
	head = cancella(head, 333);
	head = cancella(head, 41);
	head = cancella(head, 13);
	
	stampa(head);
}