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)
элемент в linklist, то условие в while()
впервые должен быть (j<i-1 => 0<2-1)
, поэтому на самом деле, это время выполнять только один раз, но р в то время цикл уже указывает на второй элемент, поэтому я считаю, что q->next
должен указывать на третий элемент.
Когда я выполняю код, он работает хорошо, если вход i = 2
, он удалит второй элемент, но в моем понимании он должен удалить третий элемент. Зачем?Неисправности положения указателя указателя (указателя)
'LinkList p = L' ->' LinkList * p = L' – BLUEPIXY