Показать сообщение отдельно
  #3  
Старый 14.05.2013, 06:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 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;
Ответить с цитированием