Strictly speaking, there are no assignments in your example - they are initialisations, since all three lines are declarations (actually, definitions in most contexts).
It is possible to wrap the example into a single line
List *a = NULL, *b = NULL, *c = NULL;
but note that this repeats usage of "= NULL" for initialisation of each. Also note the need for extra asterisks (*) as, without these, not all the variables would be pointers. Note that placing multiple declarations or definitions in one line like this is considered poor style, since it is easy to forget one of the * or one of the initialisers, and get completely different results than intended (unitialised auto variables are not initialised to zero).
If you are willing to separate the declaration from initialisation, it is possible to do
List *a, *b, *c;
a = b = c = NULL;
If the definitions are globals, the default initialisation is zero, so
// assume at file scope (outside any function)
List *a;
List *b;
List *c;
// equivalently: List *a, *b, *c;
does initialise all three to NULL. However this doesn't work work for initialising to other (non-zero) values. Within a function (or block) the same can be achieved by preceding the above with static.
In C++11, it is possible to do
List *a{}, *b{}, *c{};
Instead of using three named variables, it is possible to use an array.
List *a[3] = {NULL, NULL, NULL};
which can be simplified to
List *a[3] = {NULL};
since the missing initialisers in this case will result in the corresponding elements being initialised to zero.
In C++11 and later (only) the array initialisation can - as pointed out by AnT in comment - be simplified to
List *a[3] = {};
or to
List *a[3]{};
In C++, it is often encouraged (unlike in C) to replace all usages of NULL with 0 or (from C++11) with nullptr.