\begin{algorithm}
        \caption{Compactify List}
        \begin{algorithmic}
        \INPUT doubly linked list $L$ and $F$ stored in multiple arrays $free$, $prev$ and $next$
        \PROCEDURE{SwapObject}{$i, j$}
            \STATE \CALL{Swap}{$next[prev[i]], next[prev[j]]$}
            \STATE \CALL{Swap}{$prev[next[i]], prev[next[j]]$}
            \STATE \CALL{Swap}{$prev[i], prev[j]$}
            \STATE \CALL{Swap}{$next[i], next[j]$}
            \STATE \CALL{Swap}{$key[i], key[j]$}
        \ENDPROCEDURE
        \STATE
        \STATE $x = L.head$
        \STATE $i = 1$
        \WHILE{$x \ne NIL$}
            \STATE \CALL{SwapObject}{$i, x$}
            \IF {$F.head = i$}
                \STATE $F.head = x$
            \ENDIF
            \STATE $x = next[i]$
            \STATE $i = i + 1$
        \ENDWHILE
        \STATE $L.head = 1$
        \end{algorithmic}
        \end{algorithm}