Delphi双向链表

要点:

1.其实链表,就是每个节点结构体里面多了2个指针,相当于这个节点的左手和右手,左手牵着上一个节点,右手牵着下一个节点。

2.注意,需要单独弄个结构体,知道头节点和尾节点。然后头节点一直顺着右手,就可以找到尾节点,从而遍历所有的成员

 

program MyPoint;  //指针详解
{$APPTYPE CONSOLE}
uses
  SysUtils,windows,Generics.Collections ;

{双向链表}
procedure MyFunc8();
type
  PNode = ^MyNode;  //定义指针
  MyNode = record   //节点
   Text: string;
   Forw: PNode;     //前节点
   Next: PNode;   //后节点
  end;
  MyCurrNote = record //标志
    Head: pNode;      //头
    Last: pNode;      //end;
var
  I: Integer;
  OldNode , MyNewNode : PNode;//用来新建的节点
  Info :MyCurrNote;//指向头尾
  InsertNote,temNote : PNode;
begin
{初始化头尾节点}
   OldNode := nil;Info.Head := nil;//头
    Info.Last := nil;//{创建双向链表}
   for I := 0 to 99 do
   begin
      New(MyNewNode);
      MyNewNode.Text := IntToStr(I);
      if Assigned(OldNode) then OldNode.Next := MyNewNode  //旧节点右手拉新节点
      else Info.Head := MyNewNode;//头节点
      MyNewNode.Forw := OldNode;//新节点左手拉旧节点
      OldNode := MyNewNode;     //新节点变成旧节点,指定尾节点
      Info.Last := OldNode; //尾
      Info.Last.Next := nil;//尾节点右手为空
   end;
   while Assigned(Info.Head) do //头节点遍历
   begin
     Writeln(info.Head.Text);
     Info.Head := Info.Head.Next;
   end;
   while Assigned(Info.Last) do //尾节点遍历
   begin
     Writeln(Info.Last.Text);
     Info.Last := Info.Last.Forw;
   end;
end;


{main主函数}
begin
 MyFunc8();
 Readln;//回车退出
end.

 

 

 

 

 

 

 

 

posted @ 2013-10-26 23:08  GOD攀  阅读(546)  评论(0编辑  收藏  举报