我的是单向链表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;

解决方案 »

  1.   

    是通过Dispose释放的,不过你程序其它部分错漏的地方比较多
    例如:
    //插入链表项的时候就不用new(callitemlists);//Index定位时i没有加1建议用TList管理一个节点
      

  2.   

    谢谢楼上大哥指点,能否详细说明一下,如何利用TList管理节点,可以给个例子吗?
      

  3.   

    Delphi里有TList类的,就是用它来管理结点,在一定意义上好像把链表变成线性结构一样.
    TList中有许多诸如Insert,Add,Delete
    的方法。
    你要把对链表的操作跟对TList的操作联合起来。当你要对第i个结点进行操作,可以在TList中定位