The idea: for simplicity taking list. single pointer saved in the node is xor of next and previous nodes. When moving forward we xor current ptr with prev. Moving backward xor with next to get prev. That it. How do we get prev/next for xor? The only way to get in the middle of the list is using iterator. Which can hold one extra pointer. For the first/last nodes extra pointer is NULL.
The same for EB tree, as navigation can be done only using iterator it can hold extra pointer.
These are my $0.02, you are free to implement and use this algorithm. No fees, no references required.