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!