type
PNode = ^Node;
Node = record
data : Integer;
FUper : PNode;
FDown : PNode;
end; TmList = record
FHead : PNode;
FLast : PNode;
end;var global_list : TmList;
插入链表:InsertInToList(ANode : PNode);
if global_list.FHead = nil then
begin//如果链表表头为空时直接将链表头、尾节点设置成此记录
ANode^.FUper := nil;
ANode^.FDown := nil;
global_list.FHead := ANode;
global_list.FLast := ANode;
end
else//插入到链表尾
begin
global_list.FLast^.FDown := ANode;
ANode^.FUper := global_list.FLast;
ANode^.FDown := nil;
global_list.FLast := ANode;
end;删除链表节点:RemoveFromList(ANode : PNode);
if ANode = global_list.FHead then
begin//先判断是否是链表头节点
if ANode = global_list.FLast then
begin//此前链表只有一个节点而已,清空链表
global_list.FHead := nil;
global_list.FLast := nil;
end
else//此节点是头节点但不是尾节点
begin
global_list.FHead := ANode^.FDown;//链表头节点指向此节点的后继
ANode^.FDown^.FUper := nil;//此节点后继的前驱改为空
end;
end
else//此节点不是头节点
begin
if ANode = global_list.FLast then//如果是尾节点的话修正新的尾节点
begin
global_list.FLast := ANode^.FUper;//链表尾指向此节点的前驱
ANode^.FUper^.FDown := nil;//此节点前驱的后继设为空
end
else//处于链表中间的非头节点非尾节点
begin
ANode^.FUper^.FDown := ANode^.FDown;(程序运行一段时间之后在这里会出现内存访问错误,不知道为什么)
ANode^.FDown^.FUper := ANode^.FUper;
end;
end;访问链表(查找某一个节点):FindInList(ANode : PNode):Boolean;
var tmp : PNode;
tmp := global_list.FHead;
Result := false;
while tmp <> nil do
begin
if tmp^.data = ANode^.data then
begin
Result := true;
break;//找到之后跳出循环
end;
if tmp = global_list.FLast then
break
else
tmp := tmp^.FDown;
end;
//程序运行一段时间之后会在访问链表时无限循环,不知道问题出在哪里,还望各位达人解惑一下。刚开始在论坛里逛,没有分,望见谅!
PNode = ^Node;
Node = record
data : Integer;
FUper : PNode;
FDown : PNode;
end; TmList = record
FHead : PNode;
FLast : PNode;
end;var global_list : TmList;
插入链表:InsertInToList(ANode : PNode);
if global_list.FHead = nil then
begin//如果链表表头为空时直接将链表头、尾节点设置成此记录
ANode^.FUper := nil;
ANode^.FDown := nil;
global_list.FHead := ANode;
global_list.FLast := ANode;
end
else//插入到链表尾
begin
global_list.FLast^.FDown := ANode;
ANode^.FUper := global_list.FLast;
ANode^.FDown := nil;
global_list.FLast := ANode;
end;删除链表节点:RemoveFromList(ANode : PNode);
if ANode = global_list.FHead then
begin//先判断是否是链表头节点
if ANode = global_list.FLast then
begin//此前链表只有一个节点而已,清空链表
global_list.FHead := nil;
global_list.FLast := nil;
end
else//此节点是头节点但不是尾节点
begin
global_list.FHead := ANode^.FDown;//链表头节点指向此节点的后继
ANode^.FDown^.FUper := nil;//此节点后继的前驱改为空
end;
end
else//此节点不是头节点
begin
if ANode = global_list.FLast then//如果是尾节点的话修正新的尾节点
begin
global_list.FLast := ANode^.FUper;//链表尾指向此节点的前驱
ANode^.FUper^.FDown := nil;//此节点前驱的后继设为空
end
else//处于链表中间的非头节点非尾节点
begin
ANode^.FUper^.FDown := ANode^.FDown;(程序运行一段时间之后在这里会出现内存访问错误,不知道为什么)
ANode^.FDown^.FUper := ANode^.FUper;
end;
end;访问链表(查找某一个节点):FindInList(ANode : PNode):Boolean;
var tmp : PNode;
tmp := global_list.FHead;
Result := false;
while tmp <> nil do
begin
if tmp^.data = ANode^.data then
begin
Result := true;
break;//找到之后跳出循环
end;
if tmp = global_list.FLast then
break
else
tmp := tmp^.FDown;
end;
//程序运行一段时间之后会在访问链表时无限循环,不知道问题出在哪里,还望各位达人解惑一下。刚开始在论坛里逛,没有分,望见谅!
解决方案 »
- 请问如果在access库文件中设置了密码,要在ADOConnecting控件上如何加上密码?
- 关于formatFloat的用法问题!!
- 如何在for循环中创建线程(不知能否做到)。高手请进
- 大家来看看这个网站,有首放的黑马实战研究,很不错的!
- 外部调用xp下的shutdown不成功??
- 浮点运算错误!
- IBM品牌机在Win98下安装Delphi6后缺少部分组件的问题
- 关于VarArrayCreate的调用(50分)
- TTransparentButton是什么控件?如何加入到我的工程中?
- 小弟刚接触delphi,还不太明白sql什么意思!谁能详细给我解释一下?
- 怎么在javascript里面调用DELPHI写的ACTIVEX控件啊
- 如何实现字符加串加1,如(fg00100227)变到(fg00100228).....
//申请内存
ANode := PNode(GlobalAlloc(GPTR, sizeof(Node)));//释放内存
GlobalFree(DWORD(ANode));