链接列表指针的位置(索引)问题

时间:2013-03-29 20:39:47

标签: c pointers indexing while-loop

Status ListDelete(LinkList *L, int i, int *e)
{
   int j=0;
   LinkList p=L,q;
   while(p->next && j > i-1)
   {
     p = p->next;
     j++;
   }

   if(!p->next||j>i-1) 
     return ERROR;
   q=p->next; 
   p->next=q->next;
   *e=q->data;
   free(q);
   return OK;
}

代码是正确的,但我需要对指针p的位置变化做一些解释。

我的问题是:
如果我想删除链接列表中的第二个(i=2)元素,那么while()中第一次的条件应该是(j<i-1 => 0<2-1),所以实际上,while只执行一次,但是p在while循环中已经指向第二个元素,所以我认为q->next应该指向第三个元素。

当我执行代码时,它运行良好,如果输入i = 2,它将删除第二个元素,但在我的理解中,它应该删除第三个元素。为什么呢?

2 个答案:

答案 0 :(得分:0)

由于i-1,使得i = 1,它指向列表中的第二个元素。 HTH。

答案 1 :(得分:0)

循环条件的第二部分告诉代码在删除之前循环必须跳过的元素数量。当您需要删除第二个元素时,需要先跳过一个元素。通常,要删除元素编号N,您需要跳过N-1个元素。

相关问题