This viene usato in C++, non può essere utilizzato in C perchè il C non è OO.
this assume l'indirizzo dell'oggetto che viene chiamato. Ad esempio
s.print, this è uguale a &s.
Faccio un esempio con una classe:
class A
{
public:
int print();
};
/* instanzio l'oggetto */
A s;
s.print(); //all'interno della funzione this è uguale all'indirizzo di s (&s).
Nel tuo esempio
List *L=this; //L punta all'indirizzo di this, quindi L deve essere un puntatore. non potrebbe essere List L=this.