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.