如何删除链表的第一个元素?
How to remove the first element of a linked list?
这个过程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);
这个过程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);