此过程Supprimerpremier
应该删除链表的第一个元素,方法是将头指针移动到第二个元素,然后处理第一个似乎不起作用的元素。
我不知道为什么它不起作用;当我用过程显示列表时,列表仍然有3个元素。
提前感谢=(
Program TP1;
Uses crt ;
Type
T = ^TT;
TT = Record //declaring my list
s: String;
n: Integer;
nxt: T;
End;
Var
x,p : T ;
Procedure Supprimerpremier (L : T); // procedure to delete the first element of my list
Var
x: T;
iptr: ^integer;
y: ^word;
Begin
x:=L;
L:=L^.nxt;
Dispose(x);
End;
Procedure Afficher (L :T); //prints the list
Var
x: T;
Begin
x := L;
While ( x^.nxt<> Nil ) Do //
Begin
Writeln;
Writeln;
Writeln(x^.s);
Writeln(x^.n);
x := x^.nxt;
End;
Writeln;
Writeln;
Writeln(x^.s);
Writeln(x^.n);
End;
//
Begin
new(p);
p^.n := 1111;
p^.s := 'iam the first element';
new(p^.nxt);
p^.nxt^.n := 222;
p^.nxt^.s := 'iam the second element';
new(p^.nxt^.nxt);
p^.nxt^.nxt^.n := 778;
p^.nxt^.nxt^.s := 'iam the third element ';
p^.nxt^.nxt^.nxt := Nil;
Supprimerpremier (p); //
Afficher (p);
end;
您通过值传递L
参数,因此过程将接收调用方传入的任何变量(即p
(的副本。过程对L
(即L:=L^.nxt;
语句(的值所做的任何修改都不会反映回调用方的变量。
您需要通过var reference传递L
参数,例如:
Procedure Supprimerpremier (var L : T);