Всем привет, нужна помощь.
Дан массив указателей на списки (а именно на первые коэф-нты). Вот программа, она работает :
program lab;
uses crt;
const n=5;
      k=3;

type listPtr=^list;   {1-svaz. spisok}

     List=object
     Barier:boolean;
     nomer:word;       {Nomer koeff-ta}
     koeff:integer;     {koefficient}
     next:listPtr;

     constructor init(nom,g:word);
     procedure print(first:boolean);
     end;

Var A:array [1..n] of listPtr;      {massiv uravneniy}
    Aravno:array[1..n] of integer;  {Massiv ravno}
    i,nomer:word;

constructor list.init (nom,g:word);  {nom-nomer koeff-ta; g- kol-vo nenulevih koeff-tov}
  Var exists:integer;
  begin
  if (nom<=n) and (g<=k) then begin
     exists:=random(2);        {est' ili net}
     if exists<>0 then begin
     barier:=false;                  barier:=false;
     nomer:=nom;
     koeff:=random(50)+1;
     new(Next);
     next^.init(nom+1,g+1);
     end
                else init(nom+1,g);
     end
     else begin barier:=true; Aravno[i]:=random(51); end;
  end;

procedure list.print (first:boolean);
       begin
       if not barier then begin
     if first then write(koeff,'x',nomer)
        else write(' + ',koeff,'x',nomer);
           first:=false;
     next^.print(first);
     end
       else writeln(' = ',Aravno[i]);
       end;

begin
clrscr;
randomize;
for i:=1 to n do begin
    new(a[i]);
    a[i]^.Init(1,1);
    end;
for i:=1 to n do begin
    write(i,') ');
    a[i]^.print(true);
    end;
readln;
end.


теперь необходимо написать 2 разных метода, первый из которых должен оставлять исходный объект без изменений, а второй - применять информационные элементы исходного объекта при формировании двусвязного списка. Каждый из этих двух методов должен иметь в качестве параметра указатель на формируемый двусвязный список. Второй метод (освобождающий память) должен быть деструктором.
Прочитал FAQ, пробовал наследованием. Получается так :
program lab;
uses crt;
const n=5;
      k=3;

type listPtr=^list;   {1-svaz. spisok}

     list=object
     barier:boolean;
     nomer:word;       {Nomer koeff-ta}
     koeff:integer;     {koefficient}
     next:listPtr;

     constructor init(nom,g:word);
     procedure print(first:boolean);
     end;
type list2Ptr=^list2; {2-svaz. spisok}

     list2=object(list)
     next2:list2Ptr;
     prev:list2Ptr;     {pred. zveno}

     constructor init2;
     procedure print2(first2:boolean);
     end;

Var A:array[1..n] of listPtr;      {massiv uravneniy}
    Aravno,Bravno:array[1..n] of integer;  {Massiv ravno}
    B:array[1..n] of list2Ptr;
    i,nomer:word;

constructor list.init (nom,g:word);  {nom-nomer koeff-ta; g- kol-vo nenulevih koeff-tov}
  Var exists:integer;
  begin
  if (nom<=n) and (g<=k) then begin
     exists:=random(2);        {est' ili net}
     if exists<>0 then begin
     barier:=false;                  barier:=false;
     nomer:=nom;
     koeff:=random(50)+1;
     new(Next);
     next^.init(nom+1,g+1);
     end
                else init(nom+1,g);
     end
     else begin barier:=true; Aravno[i]:=random(51); end;
  end;

procedure list.print (first:boolean);
       begin
       if not barier then begin
     if first then write(koeff,'x',nomer)
        else write(' + ',koeff,'x',nomer);
           first:=false;
     next^.print(first);
     end
       else writeln(' = ',Aravno[i]);
       end;

constructor list2.Init2;
     begin
  init(1,1);
  new(next2);
  next2^.barier:=next^.barier;
  next2^.nomer:=next^.nomer;
  next2^.koeff:=next^.koeff;
  next2^.prev:=prev^.next2;
     end;
procedure list2.print2(first2:boolean);
     begin
  if not barier then begin
     if first2 then write(koeff,'x',nomer)
    else write(' + ',koeff,'x',nomer);
     first2:=false;
     next2^.print(first2);
     end
  else writeln(' = ',bravno[i]);
  end;

begin
clrscr;
randomize;
for i:=1 to n do begin
    new(b[i]);
    b[i]^.Init2;
    bravno[i]:=aravno[i];
    end;
for i:=1 to n do begin
    write(i,') ');
    b[i]^.print2(true);
    end;
readln;
end. 

правда еще не используется prev, но проблема в другом
Сначала второй инит был таким:
constructor list2.Init2;
     begin
  init(1,1);
  new(next2);
  next2^.barier:=next^.barier;
  next2^.nomer:=next^.nomer;
  next2^.koeff:=next^.koeff;
  next2^.prev:=prev^.next2;
     end;  

При этом из первого коэф-нта просто навсего по Next создавался односвязный список, а параллельно в next2 оставался nil, теперь, как я понял, еще копируется последний коэф-нт
Судя по всему осталась задача раскрыть init и сразу пересохранять информацию из next в next2, а заодно указать prev.
Помогите, люди, плз. Я уже в конец запутался в этой задаче, буду очень признателен