【问题标题】:How to remove the first element of a linked list?如何删除链表的第一个元素?
【发布时间】:2021-04-11 18:02:00
【问题描述】:

这个过程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;  

【问题讨论】:

  • 请编写一个将值添加到列表尾部的过程。看到 p^.nxt^.nxt^.n = ...,我的眼睛很痛

标签: list delphi linked-list pascal


【解决方案1】:

您正在传递L 参数按值,因此该过程接收调用者传入的任何变量的副本(即p)。过程对L 的值(即L:=L^.nxt; 语句)所做的任何修改都不会反映回调用者的变量。

您需要通过 var 引用 来传递L 参数,例如:

Procedure Supprimerpremier (var L : T);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多