请求大佬解释一下语句

想问问代码中的加粗的部分L->node[p].next是实现什么的,initiate函数中不是已经赋值为-2了吗

 

 

typedef   struct
{
     DataType  data;
     int  next;
} Stlisttype;

typedef struct
{
    Stlisttype node[MaxSize];
    int head;
}StLick;

void ListInitiate(StLick *L)
{
  int i;
  L->head=0;
    for(i=0;i<MaxSize;i++)
    {
        L->node[i].next=-2;
    }
    L->node[L->head].next=-1;            //只有头结点的next值为-1
}

int  ListLength(StLick L)
{
    int size=0;

    int p=L.head;
    while(L.node[p].next!=-1)
    {
          p=L.node[p].next;
          size++;

    }
    return  size;
}
int  ListInsert(StLick *L,int i,DataType  x)
{
   int  k,j=-1;
   int  p=L->head;
   while (L->node[p].next!=-1&&j<i-1)
      {
          p=L->node[p].next;              //p用来指向第i-1个结点
          j++;
      }

   if(j!=i-1)
   {
        printf("\n 插入位置参数出错!");
        return 0;
    }
      for(k=0;k<MaxSize;k++)
      {
          if(L->node[k].next==-2)                   //寻找第一个可用结点
          {
              L->node[k].next=L->node[p].next;
              L->node[p].next=k;
              L->node[k].data=x;
              break;
          }
      }
      if (k==MaxSize)
        {
        printf("链表已满,无法插入!");
        return 0;
        }
      return  1;
   }
 

如果只是初始化后就调用ListLength函数,那么你加粗这句话是不会被执行的,因为此时头的next值为-1,if条件不满足

所以一定是调用ListInsert后,再ListLength才会执行加粗代码,此时加粗代码的p就不是-2了,在ListInsert中已经被赋值指向下一个节点的有效序号了,直到找到next为-1为止