// Classe lista: listc.cpp #include "listc.h" /* Metodo ricorsivo che ritorna un puntatore all' i-esimo * elemento della lista. Richiede di sapere quale elemento * e' questo nella lista (curr). * Ritorna un puntatore all'elemento o NULL se non ce ne sono * abbastanza */ list * list::index (int i, int curr) { if (i == curr) // Se 'io' (curr) son quello richiesto return this; // ritorno un puntatore a me stesso else if (next) // Altrimenti, se c'e' un prossimo elemento return next -> index (i,curr + 1); // va a cercare al prossimo (dicendogli che e' il prossimo - curr+1) else return 0; // Se non c'e' neanche il prossimo, ritorna 'NULL' = non trovato } /* operatore += : Aggiunge la lista che comincia con 'add' * in coda alla lista di cui fa parte questo emelento */ void list::operator += (list *add) { if (next) // Se c'e' un prossimo elemento next -> operator += (add); // Lo appendo in fondo alla sual lista chiamando l'operatore per nome else next = add; // Altrimenti (sono l'ultimo), lo appendo qui } /* Elimina quest'oggetto dalla lista <base> */ void list::remove (list **base) { list *b; if (*base == this) // Se la lista inizia con questo emento *base = next; // La fa iniziare con il prossimo else { // Altrimenti for (b = *base;b -> next; b = b -> next) // Scandisce la lista if (b -> next == this) // Quando trova l'elemento che mi precede { b -> next = next; // Gli collega il prossimo break; // e termina la scansione } } next = 0; // Per finire, mi indica come terminatore della mia lista }