Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 在pascal中的简单链表节点中删除_Delphi_Linked List_Nodes_Procedures - Fatal编程技术网

Delphi 在pascal中的简单链表节点中删除

Delphi 在pascal中的简单链表节点中删除,delphi,linked-list,nodes,procedures,Delphi,Linked List,Nodes,Procedures,我已经编写了一段代码,可以在pascal中的简单链表节点中工作。现在我需要添加一个过程,可以删除或删除我的简单链表中的元素。我已经做了很多测试和添加的过程,但是我不知道如何添加一个可以删除项目的过程。这是我的密码: type node = ^MyRec; MyRec = record value: Integer; index: integer; next: node end; var head, tail: node; i, ix: Integer

我已经编写了一段代码,可以在pascal中的简单链表节点中工作。现在我需要添加一个过程,可以删除或删除我的简单链表中的元素。我已经做了很多测试和添加的过程,但是我不知道如何添加一个可以删除项目的过程。这是我的密码:

type
  node = ^MyRec;
  MyRec = record
    value: Integer;
    index: integer;
    next: node
  end;

var
  head, tail: node;
  i, ix: Integer;
const
  el = 14;

procedure Insert;
var
  tmp: node;
  ix: Integer;
begin
  Randomize;
  for i := 1 to el do
  begin
    new (tmp);
    inc(ix);
    tmp^.value := Random(88);
    tmp^.index := ix;
    tmp^.next:= nil;
    if head = nil
      then head := tmp
    else
      tail^.next := tmp;
    tail:= tmp;
  end;
end;

//displays the list
procedure Display;
var
  tmp: node;
begin
  tmp := head;
  while tmp <> nil do
  begin
    WriteLn('Val=', tmp^.value, ' ID=', tmp^.index);
    tmp := tmp^.next
  end;
end;

begin
  head := nil;
  ReadLn;
end.

我将给你一些信息和伪代码,这样你就能自己解决这个问题

您可以将链表视为项目链:

Head ->  Item1 -> Item2 -> Item3 -> Item4 <- Tail

请修复缩进并尝试删除所有不必要的代码,如“已满”以及与此问题无关的其他代码。@LasseV.Karlsen编辑了我的代码并发布了它。这应该是一个单链表还是双链表?您有一个prev字段,但似乎没有在任何地方设置它。@500 InternalServerError它支持为single。是我的错误,我添加了prev。我试图理解链表是如何工作的。现在我把它删掉了。此外,我还有一项任务,将我的列表添加为结束指针。这是怎么回事?
procedure Insert(index, value: Integer);
var
  tmp: node;
begin
  new (tmp);
  tmp^.value := value;
  tmp^.index := index;
  tmp^.next:= nil;
  if head = nil
    then head := tmp
  else
    tail^.next := tmp;
  tail:= tmp;
end;

procedure FillList;
var
  ix: Integer;
begin
  Randomize;
  for i := 1 to el do
  begin
    inc(ix);
    Insert(ix, Random(88));
  end;
end;