Which option for Lists?

Since elements are dynamically allocated they can't be in L: some of the info about the list will be outside of L.

Use option 2: L is a pointer to a header.

Every defined list requires a header, even an empty list!

Why not use NULL for an empty list?

Consider L1={V}, assign L2=L1, then DELETE(L1,V).

L1 has become empty, therefore its header must be returned to the global pool and L1 is set to NULL.

But L2 shared the same header with L1: L2 is now pointing to a header that is gone!