Удаление элемента из списка
Листинг 8.6. Удаление узла из списка.
unit dlist2_; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCTRLs; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Button1: TButton; Button2: TButton; Label3: TLabel; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} type TPStudent=^TStudent; //указатель на тип TStudent TStudent = record f_name:string[20]; // фамилия l_name:string[20]; // имя next: TPStudent; // следующий элемент списка end; var head: TPStudent; // начало (голова) списка procedure TForm1.Button1Click(Sender: TObject); var node: TPStudent; // новый узел списка curr: TPStudent; // текущий узел списка pre: TPStudent; // предыдущий, относительно curr, узел begin new(node); // создание нового элемента списка node^.f_name: = Edit1.Text; // фамилия node^.l_name: = Edit2.Text; // имя // добавление узла в список // сначала найдем подходящее место в списке для узла curr: = head; pre: = NIL; { Внимание! если приведенное ниже условие заменить на (node.f_name>curr^.f_name)and(curr<>NIL) то при добавлении первого узла возникает ошибка времени выполнения, так как curr = NIL и, следовательно, переменной curr.^name нет! В используемом варианте условия ошибка не возникает, так как сначала проверяется условие (curr <> NIL), значение которого FALSE и второе условие в этом случае не проверяется. }