// 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_base *list_base::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 } /* concat : Aggiunge la lista che comincia con 'add' * in coda alla lista di cui fa parte questo emelento */ void list_base::concat (list_base *add) { if (next) // Se c'e' un prossimo elemento next -> concat (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_base::remove_base (list_base **base) { list_base *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 }