begin
// Создаём список из 20 элементов
Randomize;
var List := New tList(Random(-10,+10));
var Last := List;
for var N := 2 to 20 do
begin
Last.Next := New tList(Random(-1,+10));
Last.Next.Pred := Last;
Last := Last.Next;
end;
List.Pred := Last;
Last.Next := List;
WriteLn('Создан список');
OutList(List);
type
tList = class
Data : Integer;
Pred, Next : tList;
constructor (N : Integer);
begin
Data := N;
Pred := nil; Next := nil;
end;
end;
procedure OutList(List : tList);
begin
var Cur := List;
repeat
Print(Cur.Data);
Cur := Cur.Next;
until Cur = List;
WriteLn;
end;
begin
// Создаём список из 20 элементов
Randomize;
var List := New tList(Random(-10,+10));
var Last := List;
for var N := 2 to 20 do
begin
Last.Next := New tList(Random(-1,+10));
Last.Next.Pred := Last;
Last := Last.Next;
end;
List.Pred := Last;
Last.Next := List;
WriteLn('Создан список');
OutList(List);
// Удалить первый отрицательный (список не может быть пустым)
var Cur := List;
while (Cur.Data >= 0) and (Cur.Next <> List) do
Cur := Cur.Next;
if Cur.Data >= 0 then
WriteLn('В списке нет отрицательных!')
else
begin
Cur.Pred.Next := Cur.Next;
Cur.Next.Pred := Cur.Pred;
if Cur = List then
List := List.Next;
WriteLn('Удалён первый отрицательный');
OutList(List);
end;
// Добавить новый в конец
var Add := New tList(ReadLnInteger('Введите число:'));
Add.Pred := List.Pred;
List.Pred.Next := Add;
List.Pred := Add;
Add.Next := List;
WriteLn('Добавлен новый в конец');
OutList(List);
// Обратный порядок
WriteLn('Список в обратном порядке:');
var Tmp := List.Pred;
repeat
Print(Tmp.Data);
Tmp := Tmp.Pred;
until Tmp = List.Pred;
WriteLn;
end.