我的是单向链表type
incomingcallptr = ^incomingcalltype;
incomingcalltype = record
callId: Integer;
nextitem : incomingcallptr;
end;var
callitemlists :incomingcallptr ;//---------------------------------------------------------------------------
procedure TMainform.incomingcalladditem(item:incomingcallptr); //插入链表项
var
i:integer;
ptr:incomingcallptr;
begin
if (callitemlists = nil) then
begin
new(callitemlists);
callitemlists := item;
end
else
begin
ptr := callitemlists;
while (ptr.nextitem <> nil) do
ptr := ptr.nextitem; //查询链表尾
ptr.nextitem := item; //在链表尾部加入链表项
end;
end;//---------------------------------------------------------------------------
procedure TMainform.incomingcalldeleteitem(index:integer); //删除链表项
var
i,count:integer;
ptr,ptr2:incomingcallptr;
begin
count := incomingcallitemcount(); ptr := callitemlists;
ptr2 := callitemlists;
sendtodebug_log('delete');
if count =1 then
begin
dispose(callitemlists);
callitemlists :=nil;
end
else if count >1 then
begin
while(i<index-1) do
begin
ptr2 :=ptr2.nextitem;
end;
ptr := ptr2.nextitem;
ptr2.nextitem := ptr2.nextitem.nextitem;
dispose(ptr);//这样释放被删除的链表项正确吗?
end;end;
//---------------------------------------------------------------------------
function TMainform.incomingcallitemcount():integer; //计算链表项数目
var
i:integer;
ptr:incomingcallptr;
begin
ptr := callitemlists;
i :=0;
while (ptr <> nil) do
begin
ptr := ptr.nextitem;
inc(i);
end;
result := i;
end;
incomingcallptr = ^incomingcalltype;
incomingcalltype = record
callId: Integer;
nextitem : incomingcallptr;
end;var
callitemlists :incomingcallptr ;//---------------------------------------------------------------------------
procedure TMainform.incomingcalladditem(item:incomingcallptr); //插入链表项
var
i:integer;
ptr:incomingcallptr;
begin
if (callitemlists = nil) then
begin
new(callitemlists);
callitemlists := item;
end
else
begin
ptr := callitemlists;
while (ptr.nextitem <> nil) do
ptr := ptr.nextitem; //查询链表尾
ptr.nextitem := item; //在链表尾部加入链表项
end;
end;//---------------------------------------------------------------------------
procedure TMainform.incomingcalldeleteitem(index:integer); //删除链表项
var
i,count:integer;
ptr,ptr2:incomingcallptr;
begin
count := incomingcallitemcount(); ptr := callitemlists;
ptr2 := callitemlists;
sendtodebug_log('delete');
if count =1 then
begin
dispose(callitemlists);
callitemlists :=nil;
end
else if count >1 then
begin
while(i<index-1) do
begin
ptr2 :=ptr2.nextitem;
end;
ptr := ptr2.nextitem;
ptr2.nextitem := ptr2.nextitem.nextitem;
dispose(ptr);//这样释放被删除的链表项正确吗?
end;end;
//---------------------------------------------------------------------------
function TMainform.incomingcallitemcount():integer; //计算链表项数目
var
i:integer;
ptr:incomingcallptr;
begin
ptr := callitemlists;
i :=0;
while (ptr <> nil) do
begin
ptr := ptr.nextitem;
inc(i);
end;
result := i;
end;
例如:
//插入链表项的时候就不用new(callitemlists);//Index定位时i没有加1建议用TList管理一个节点
TList中有许多诸如Insert,Add,Delete
的方法。
你要把对链表的操作跟对TList的操作联合起来。当你要对第i个结点进行操作,可以在TList中定位