Why does the doubly linked list in sys/queue.h maintain the address of previous next element?
I'm studying sys/queue.h from FreeBSD and I have one question: In sys/queue.h , LIST_ENTRY is defined as follows: #define LIST_ENTRY(type) \ struct { \ struct type *le_next; /* next element */ \ struct type **le_prev; /* address of previous next element */ \ } Why does it maintain the address of previous next element ( struct type **le_prev ) rather than simply previous elment like struct type *le_prev ? If you would have read the queue.h file from the beginning, you may have got following comment: * A list is headed by a single forward pointer (or an array of forward * pointers for a hash