:大家帮看看删除链表项时如何释放内存空间啊

求救:大家帮看看删除链表项时怎么释放内存空间啊?
我的是单向链表

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;