program spiski;type ListElement = ^TListElement; TListElement = record Data: integer; Next, Previous: ListElement; end;var first, current, last: ListElement; i: integer;procedure Delete(var element: ListElement);var x: ListElement;begin while element <> nil do begin if (element^.Data = 0) and (element^.Next <> nil) then begin x := element^.Next; {следующий элемент который надо удалить} {сшиваем дырку которая образуется после удаления х} element^.Next := x^.Next; if (x^.Next <> nil) then x^.Next^.Previous := element; Dispose(x); end; element := element^.Next; end;end;procedure Print(first: ListElement);begin if first = nil then begin writeln('Список пуст.'); exit; end; while first <> nil do begin Write(first^.Data, ' '); first := first^.Next end; writeln;end;begin for i := 1 to 11 do begin if first = nil then begin new(first); first^.Next := nil; first^.Previous := nil; last := first; end else begin new(last^.Next); last^.Next^.Previous := last; last := last^.Next; last^.Next := nil; end; last^.Data := random(8 + 5) - 5; end; current := first; Print(first); Delete(current); Print(first);end.