Вставка элементов в список чисел

Рейтинг: 0Ответов: 1Опубликовано: 27.12.2014

Помогите написать на Pascal задачу.

Пусть L - список целых чисел. Описать процедуру, которая включает в список число 0 за первым отрицательным числом. Если в L нет отрицательных чисел, список не менять.

Трудность, для меня, состоит в том, как создать звено с нулём и включить его в список после отрицательного элемента...

type list=^elem;  
elem=record data:integer; next:list; end;

procedure otr(l:list);  
  var f:boolean;p:list;  
begin  
  f:=false;p:=l;  
  while (p<>nil)and not f do  
    if p^.data<0 then   
      begin
        {Вот здесь не знаю как написать}  
      end  
    else
      p:=p^.next;
end;

Ответы

▲ 1

Единственная хитрость в вашей задаче — это то, что надо вставить перед найденным элементом. Для этого вам нужно иметь указатель на звено вместо самого звена.

procedure otr(var l: list); { var обязателен! }
  var curr: ^list;
      savednext: list;
begin
  curr := @list;
  while (curr^ <> nil) do  
    if curr^^.data < 0 then   
      begin
        savednext := curr^^.next;
        new(curr^);
        curr^^.data := 0;
        curr^^.next := savednext;
        break;
      end  
    else
      curr := @(curr^^.next);
end;

Надеюсь, я не ошибся с синтаксисом паскаля, давно не практиковался.