void filter( List &l )
This means "pass by reference" and not "by value", i.e. pass a pointer to an object l, rather than copying l to the stack. In terms of how it works on the computer, there is no difference between "void filter (List & l)" and "void filter (List * l)", since both of them become pointers passed to the function. From the encoder's point of view, however, "void filter (List & l)" has the advantage that complier ensures that you do not get "nullptr".
List * aux = &l;
This means "give me a pointer to an object l". The "&" symbol is used for many different things in C / C ++, and in this context it means "give me the address." aux is a pointer to an object of type List, not an object of type List (of course, List itself is a pointer to a nodeList here).
aux = &((*aux)->next);
*aux is the object that aux points to, which is "nodeList *". (*aux)->next is the next pointer in the nodelist object pointed to by the List object pointed to by aux. aux = & sets the aux pointer to point to this object.
This code segment is not particularly clear or concise, so I assume that it is written this way as an educational tool to understand if you understand pointers, links, and an address in C / C ++. Thus, perhaps you should study the definitions of these operators in a tutorial on pointers to C / C ++.
source share