``````{
³ I'm looking for a routine to swap two nodes in a double
³ linked list or a complete sort.

There has been a thread on the TP conf area in CIS on quick
sorting a (double) linked list. To swap two nodes, remove one,
then add it in where desired. Quick sample-
}

type
s5       = string[5];
ntp      = ^nodetype;
nodetype = record
prv,nxt : ntp;
data    : s5;
end;
const
nbr : array[0..9] of string[5] = ('ZERO','ONE','TWO',
'THREE','FOUR','FIVE','SIX','SEVEN','EIGHT','NINE');
var
node,root : ntp;
i : integer;

procedure swap (var n1,n2 : ntp);
var n : ntp;
begin
n := n1;
n1 := n2;
n2 := n;
end;

procedure addnode (var n1,n2 : ntp);
begin
swap(n1^.nxt,n2^.prv^.nxt);
swap(n1^.prv,n2^.prv);
end;

procedure getnode(i:integer);
var n : ntp;
begin
getmem(n,sizeof(nodetype));
n^.nxt := n;
n^.prv := n;
n^.data := nbr[i];
if root=nil
then root := n
end;

begin
root := nil;
for i := 0 to 9 do
begin
getnode(i);
node := root;
writeln;
writeln('The linked now is-');
repeat
writeln(node^.data);
node := node^.nxt;
until node = root;
end;
end.

``````