The first node on the list is not really an element of the queue. (The first element of the queue is the second node of the list.) This extra node makes it easier to deal with the edge case when the queue is empty.
I know the overhead of having an extra node at the front of the queue is negligible, but it still seems a little unelegant. Is there a concrete/proven reason why we need this, or is it conceivable that we could create a lockfree queue without this construct.