
14.05.2013, 06:53
|
Модератор
|
|
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
|
|
Snake22, умный, да 
Список же дан
Ладно, я сегодня добрый.
Код:
type
PItem = ^TItem;
TItem = record
Value : Integer;
Next : PItem;
End;
// Вариант 1. Находим нужный элемент, после чего хвост удаляем
procedure DeleteAfterZero1(AHead : PItem);
var
ATail : PItem;
begin
If AHead <> Nil Then
If AHead.Value = 0
Then
Begin
ATail := AHead.Next;
AHead.Next := Nil;
// Здеся циклом, хотя можно тоже сделать рекурсию
While ATail <> Nil Do
Begin
AHead := ATail.Next;
Delete(ATail);
ATail := AHead;
End;
End
Else DeleteAfterZero1(AHead.Next);
end;
// Вариант 2. Находим нужный элемент, после чего хвост удаляем рекурсивно
procedure DeleteAfterZero2(AHead : PItem; IsDelete : Boolean = Fasle);
var
ATail : PItem;
begin
If AHead <> Nil Then
If IsDelete
Then
Begin
ATail := AHead.Next;
Delete(ATail);
DeleteAfterZero2(ATail,IsDelete);
End
Else
Begin
If AHead.Value = 0
Then
Begin
ATail := AHead.Next;
AHead.Next := Nil;
DeleteAfterZero2(ATail,True);
End
Else DeleteAfterZero2(AHead.Next,IsDelete);
End;
end;
|