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 只执行了一次,但是while 循环中的p 已经指向了第二个元素,所以我认为q->next
应该指向第三个要素。
当我执行代码时,它运行良好,如果输入i = 2
,它将删除第二个元素,但在我的理解中,它应该删除第三个元素。为什么?