procedure TForm1.InsertItem(listhead: link; pos: integer; data: string);
//在单项链表的指定位置添加项.
var
 p, tem: link;
 n,j : integer;
begin
 p:= listhead;
 j:= 0;
 TotalItem(listhead,n);
 * if (pos <= n) then
 * //寻找i-1 个结点.
 *  while(j < pos-1) do
 *  begin
 *   p:=P^.next;
 *   j:=j+1;
 *  end;
   new(tem);
   tem^.data:= data;
   tem^.next := P^.next;
   P^.next:= tem;
   end
    else ShowMessage('插入位置出现错误!');
end; 请问大家我画*号的地方是什么意思呀???有什么作用呀????

解决方案 »

  1.   

    if (pos <= n) then
    防止越界
    下边的为找到插入点,然后后移!
      

  2.   

    procedure TForm1.InsertItem(listhead: link; pos: integer; data: string);
    //在单项链表的指定位置添加项.
    var
     p, tem: link;
     n,j : integer;
    begin
     p:= listhead;//P指针指向链表的头结点
     j:= 0;//初始化J为0
     TotalItem(listhead,n);//得到链表的结点数
     * if (pos <= n) then//如果插位置小于结点数,
     * //寻找到i-1 个结点.
     *  while(j < pos-1) do//从第0个结点指针开始往后移,一直到要插入的位置
     *  begin
     *   p:=P^.next;//指针指向下一个结点
     *   j:=j+1;
     *  end;
       new(tem);//分配内存空间
       tem^.data:= data;//赋值给将要插入链表的结点
       tem^.next := P^.next;//该结点指针指向你上面找到的位置的下一个
       P^.next:= tem;//指定位置的结点指针又指向你新加入的结点.由此完成了结点的手稿
       end
        else ShowMessage('插入位置出现错误!');
    end;不知你明白了没有.
      

  3.   

    很简单,就是寻找你要的插入位置,例如在3与4之间插入,你传递的参数POS为3,则它就从链表头扫描到3位置定位,建立新节点写数据后,将3位置的NEXT写给新节点NEXT,将3位置NEXT指向新节点,实现3与4之间连接一新节点操作。不知道这样说你清楚了吗?这里能画图就好了~