Доброе время суток все. Нужна помощь.
Сформировать список и выполнить следующее задание:
Удаление из списка всех элементов после данного.
НО, у меня есть код вот этого задания.
Удаление из списка заданного элемента.
Помогите изменить пожалуйста.
Код:
unit dlist3_;
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;
Button3: TButton;
Edit3: TEdit;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
type
TPStudent=^TStudent;
TStudent = record
numb:integer;
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;
begin
new(node);
node^.numb:=strtoint(edit3.text);
node^.f_name:=Edit1.Text;
node^.l_name:=Edit2.Text;
curr:=head;
pre:=NIL;
while (curr <> NIL)and(node.numb>curr^.numb)do
begin
pre:= curr;
curr:=curr^.next;
end;
if pre = NIL
then
begin
node^.next:=head;
head:=node;
end
else
begin
node^.next:=pre^.next;
pre^.next:=node;
end;
Edit1.text:='';
Edit2.text:='';
Edit3.text:='';
Edit3.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+inttostr(curr^.numb)+' '+curr^.f_name+' '+curr^.l_name+#13;
curr:=curr^.next;
end;
if n <> 0
then ShowMessage('Список'+#13+#13+st)
else ShowMessage('В списке нет эллементов.');
end;
procedure TForm1.Button3Click(Sender: TObject);
var
curr:TPStudent;
pre: TPStudent;
found:boolean;
if head = NIL then
begin
MessageDlg('Список пусто!',mtError,[mbOk],0);
Exit;
end;
curr:=head;
pre:=NIL;
found:=FALSE;
while (curr <> NIL) and (not found) do
begin
if (curr^.f_name = Edit1.Text) and (curr^.l_name = Edit2.Text)
and(curr^.numb=strtoint(edit3.Text))
then found:=TRUE
else
begin
pre:=curr;
curr:=curr^.next;
end;
end;
if found then
begin
if MessageDlg('Узел будет удалён из списка!',mtWarning,[mbOk,mbCancel],0) = mrOk
then begin
if pre = NIL then begin
head:=curr^.next;
dispose(curr);
MessageDlg('Узел' + #13 +
' ' + #13 +
'Номер п/п: '+Edit3.Text + #13 +
'Фамилия: '+Edit1.Text + #13 +
'Имя: ' + Edit2.Text + #13 +
' ' + #13 +
'Удалён из списка.',
mtInformation,[mbOk],0);
end;
if pre <> NIL then begin
pre^.next:=curr^.next;
Dispose(curr);
MessageDlg('Узел' + #13 +
' ' + #13 +
'Номер п/п: '+Edit3.Text + #13 +
'Фамилия: '+Edit1.Text + #13 +
'Имя: ' + Edit2.Text + #13 +
' ' + #13 +
'Удалён из списка.',
mtInformation,[mbOk],0);
end;
end;
end
else begin
MessageDlg('Узел' + #13 +
' ' + #13 +
'Номер п/п: '+Edit3.Text + #13 +
'Фамилия: '+Edit1.Text + #13 +
'Имя: ' + Edit2.Text + #13 +
' ' + #13 +
'В списке не найден.',
mtError,[mbOk],0);
end;
edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
Edit3.SetFocus;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
edit3.SetFocus;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
head:=NIL;
end;
end.
Заранее благодарен за помощь.