Pascal ABC. Двунаправленный список. Удалить следующий элемент после нуля Создать двунаправленный связный список, содержащий 11 ц
Pascal ABC. Двунаправленный список. Удалить следующий элемент после нуля Создать двунаправленный связный список, содержащий 11 целых чисел из интервала [8, -5]. Вывести список на экран. Описать процедуру, которая удаляет элемент после нуля. Вывести новый список на экран. Преподаватель сказал, что проблема в том, что создается список как двунаправленный , но обрабатывается не как двунаправленный. Возникала так же проблема в том, что если ноль первый и последний элемент, то программа выдает ошибку. Прошу помогите
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;