如何删除链表的第一个元素?

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);