What do you actually think returning the pointee does?
Not to mention that (currently), returning the pointee will cause a memory leak.
Yes, but if you go p->next->previous, you won't arrive at the same struct!The pointer to the list of nodes is contained within the structure itself so there is no deviation from the norm of linked lists.
That just means that if you walk the struct, you will not find the same node as the copy you have made!
This can cause problems.