Nie wiem jak zrobić tablice list. Napisałem na razie coś takiego:

program tablicalist;





type
        Wskaznik = ^Miasto; //wskaznik na element listy

        Miasto = record
        Droga : longint;  //zawartosc elemetu
        Wsk : Wskaznik;    //wskaznik na nastepny element

        end;


        Graf = record
        Rozwiazanie : longint;
        Lista : Miasto;

        end;





const

Top : Wskaznik = nil; //wartownik  listy

var

x, d, f, m, n, o, p : longint;
t : array[1..100000] of Graf;


//POCZATEK PROCEDUR LISTY

procedure Utworzdroge (x : longint; Poprzedni : Wskaznik);

var
Nowy : Wskaznik;
begin

new(Nowy);               //nowa droga
Nowy^.Droga := x;             //numer drogi
Nowy^.Wsk := Poprzedni^.Wsk;  //ustaw wskaznik
Poprzedni^.Wsk := Nowy;      //dolacz do listy

end;

procedure UtworzTop(x : longint);

begin
  new(Top);            //stworz top
  Top^.Droga := x;    //ZMIANA!!!!!!!!!!      //nadaj wartosc glowie
  Top^.Wsk := nil;           //nadaj wskaznikowi wartosc 0
end;


function Szukaj(x : longint):Wskaznik;


var
  pomoc : Wskaznik;
begin
  pomoc := Top;
  while (pomoc^.Wsk <> nil)
    and (pomoc^.Droga <> x) do
    pomoc := pomoc^.Wsk;
  Szukaj := pomoc;
end;


procedure Usun(x : longint);

var
  pomoc : Wskaznik;
  i : integer;
begin
  if Top^.Droga = x then
    begin
      dispose(Top);
      Top := Top^.Wsk;
    end
  else
    begin
      pomoc := Top;
      while (pomoc^.Wsk <> nil) and
            (pomoc^.Wsk^.Droga <> x) do
        pomoc := pomoc^.Wsk;
      dispose(pomoc^.Wsk);
      pomoc^.Wsk := pomoc^.Wsk^.Wsk;
    end
end;

procedure Wstaw(x : longint; Za : longint);

begin
  if Top = nil then
    UtworzTop(x)
  else
    Utworzdroge(x, Szukaj(Za));
end;

procedure Dopisz(x : longint);

var
  pomoc, Nowy : Wskaznik;
begin
  Wstaw(x, 0);

end;


procedure WypiszListe;                   //tymaczasowe
{ wypisuje caĄ zawarto† listy }
var
  pomoc : Wskaznik;
begin
  pomoc := Top;              { wypisujemy od poczĄtku }
  while pomoc <> nil do
    begin
      write(pomoc^.Droga);   { nast©pny element }
      pomoc := pomoc^.Wsk      { wypisz go }
    end;
  writeln;
end;

//KONIEC PROCEDUR LISTY






begin

//WPROWADZANIE DANYCH
readln(m, d);

f := d;
n := m;

for m := 1 to n do

begin

with t[m] do

begin

UtworzTop(m);

end;

end;


for d := 1 to f do

begin
readln(p, o);

        with t[p] do

        begin


        Dopisz(o);

        end;



        with t[o] do

        begin




        Dopisz(p);


        end;
end;

//KONIEC WPROWADZANIA DANYCH

//test wypisz dane

for m := 1 to n do

begin

with t[m] do

begin

with Lista do

begin

Wypiszliste;

end;

end;

end;


end.


Niestety, coś jest nie tak i każdy element tablicy ma wspólną liste ;(.
Podejrzewam, że to przez wspólne wskaźniki, ale nie wiem jak je rozdzielić dla każdego elementu tablicy :(.
Proszę o jak najszybszą odpowiedź, z góry dziękuje.