Удаление элемента из списка
while (curr <> NIL)and(node.f_name > curr^.f_name) do begin // введенное значение больше текущего pre: = curr; curr: = curr^.next; // к следующему узлу end; if pre = NIL then begin // новый узел в начало списка node^.next: = head; head: = node; end else begin // новый узел после pre, перед curr node^.next: = pre^.next; pre^.next: = node; end; Edit1.text: = ''; Edit2.text: = ''; Edit1.SetFocus; end; procedure TForm1.Button2Click(Sender: TObject); var curr: TPStudent; // текущий элемент списка n:integer; // длина (кол-во элементов) списка st:string; // строковое представление списка begin n: = 0; st: = ''; curr: = head; while curr <> NIL do begin n: = n+1; st: = st+curr^.f_name+' '+curr^.l_name+#13; curr: = curr^.next; end; if n <> 0 then ShowMessage('Список:'+#13+st) else ShowMessage('В списке нет элементов.'); end; procedure TForm1.FormActivate(Sender: TObject); begin head: = NIL; end; end.
Процедура просматривает список от начала, сравнивая содержимое полей текущего узла с содержимым полей ввода диалогового окна. Если их содержимое совпадает, то процедура просит пользователя подтвердить удаление узла. Если пользователь нажатием кнопки ОК подтверждает, что узел должен быть удален, то процедура удаляет его. Если узла, который хочет удалить пользователь, в списке нет, программа выводит сообщение об ошибке.