Well, it doesn't hold it's own address... It just holds the prev/next pointers. Together with the clever macro it's possible to use any structure as listnode.