LISPPA: Linked lists (paxPascal).


program Lists;

var
  L, P: Variant;
  I: Integer;
begin
  writeln('Create a list');
  L := [100, [200, [300, nil]]];
  writeln(L);

  writeln('Insert new item at the beginning');
  L := [50, L];
  writeln(L);

  writeln('Add new item at the end');
  P := @L; // Create alias of L
  while P <> nil do P := @P[1]; // Find last item
  P := [400, nil]; // Add new item
  writeln(L);

  writeln('Insert new item at the middle');
  P := @L[1];
  P := @P[1]; // insert before 200
  P := [150, P];
  writeln(L);

  writeln('Print list');
  P := @L; // create alias of L
  while P <> nil do
  begin
    writeln(P[0]);
    P := @P[1]; // go to the next item
  end;

  writeln('Delete the first item of the list');
  reduced L := L[1];
  writeln(L);

  writeln('Delete the last item of the list');
  P := @L; // Create alias of L
  while P[1] <> nil do P := @P[1]; // Find last item
  reduced P := P[1];
  writeln(L);

  writeln('Delete item at the middle of the list');
  P := @L;
  P := @P[1];
  reduced P := P[1];
  writeln(L);

  writeln('Delete all items from the list');
  while L <> nil do reduced L := L[1];
  writeln(L);

  writeln('Create a cycled list');
  L := [100, [200, [300, nil]]];
  L[1][1][1] := @L; // join head and tail of the list
  writeln(L);

  delete L;

  writeln('Another way to create a cycled list');
  L := [100, [200, [300, nil]]];
  P := @L; // Create alias of L
  while P <> nil do P := @P[1]; // Find last item
  P^ := @L; // join head and tail of the list
  writeln(L);

  writeln('Print the cycled list');
  P := @L;
  I := 0;
  repeat
    writeln(P[0]);
    P := @P[1];
    Inc(I);
  until I = 15;
end.


Copyright © 1999-2006 VIRT Laboratory. All rights reserved.