Algorithm 2 Compactify List

Input: doubly linked list LL and FF stored in multiple arrays freefree, prevprev and nextnext

1:procedure SwapObject(i,ji, j)

2:Swap(next[prev[i]],next[prev[j]]next[prev[i]], next[prev[j]])

3:Swap(prev[next[i]],prev[next[j]]prev[next[i]], prev[next[j]])

4:Swap(prev[i],prev[j]prev[i], prev[j])

5:Swap(next[i],next[j]next[i], next[j])

6:Swap(key[i],key[j]key[i], key[j])

7:end procedure

8:

9:x=L.headx = L.head

10:i=1i = 1

11:while xNILx \ne NIL do

12:SwapObject(i,xi, x)

13:if F.head=iF.head = i then

14:F.head=xF.head = x

15:end if

16:x=next[i]x = next[i]

17:i=i+1i = i + 1

18:end while

19:L.head=1L.head = 1