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
,它将删除第二个元素,但在我的理解中,它应该删除第三个元素。为什么呢?
答案 0 :(得分:0)
由于i-1,使得i = 1,它指向列表中的第二个元素。 HTH。
答案 1 :(得分:0)
循环条件的第二部分告诉代码在删除之前循环必须跳过的元素数量。当您需要删除第二个元素时,需要先跳过一个元素。通常,要删除元素编号N,您需要跳过N-1个元素。