\begin{algorithm}
        \caption{Doubly Linked List with a Sentinel Implemented Using XOR}
        \begin{algorithmic}
        \REQUIRE $L.nil$ is a dummy sentinel node; $L.head$ points to the list head, 
            which conceptually is $L.nil.next$ .
        \OUTPUT Operations on $L$ using only $x.np$ pointer for each node $x$.
        \PROCEDURE{Search}{$L, k$}
            \STATE $p = L.nil$
            \STATE $x = L.head$
            \WHILE{$x \ne L.nil$ \AND $x.key \ne k$}
                \STATE $tmp = x$
                \STATE $x = p \oplus x.np$
                \STATE $p = tmp$
            \ENDWHILE
            \RETURN $x$
        \ENDPROCEDURE
        \STATE
        \PROCEDURE{Insert}{$L, x$}
            \STATE $L.head.np = x \oplus (L.head.np \oplus L.nil)$ \COMMENT{$x \oplus L.head.next$}
            \STATE $x.np = L.nil \oplus L.head$
            \STATE $L.nil.np = (L.nil.np \oplus L.head) \oplus x$ \COMMENT{$L.nil.prev \oplus x$}
            \STATE $L.head = x$
        \ENDPROCEDURE
        \STATE
        \PROCEDURE{Delete}{$L, x$}
            \STATE $p = L.nil$
            \STATE $y = L.head$
            \WHILE{$y \ne L.nil$}
                \IF{$y == x$}
                    \STATE $z = y.np \oplus p$ \COMMENT{$z = y.next$}
                    \STATE $z' = z.np \oplus y$ \COMMENT{$z' = y.next.next$}
                    \STATE $p' = p.np \oplus y$ \COMMENT{$p = y.prev, p' = y.prev.prev$}
                    \STATE $z = p \oplus z'$
                    \STATE $p = p' \oplus z$
                    \IF{$L.head = y$}
                        \STATE $L.head = z$
                    \ENDIF
                \ELSE
                    \STATE $tmp = y$
                    \STATE $y = p \oplus x.np$
                    \STATE $p = tmp$
                \ENDIF
            \ENDWHILE
            \STATE \textbf{error} "x doesn't exist in this list"
        \ENDPROCEDURE
        \STATE
        \PROCEDURE{Reverse}{$L$}
            \STATE $L.head = L.nil.np \oplus L.head$
        \ENDPROCEDURE
        \end{algorithmic}
        \end{algorithm}