There is difference between initialization and assignment. Initialization is intelligent, while for the assignment you need to resolve proper address.
Example
char str[] = "xyz"; // works - initialization
char str[10];
str = "xyz"; // error - assignment
// str is a address that can hold char not string
Similarly
Ptrlist l = {NULL}; // works - initialization
Ptrlist *l;
l->next = NULL; // works assignment
l = {NULL}; // is assignment, don't know the address space error