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 の位置変更について説明が必要です。
私の質問は:リンクリストの 2 番目の要素
を削除する場合、最初の条件は である必要があるため、実際には while は 1 回だけ実行されますが、while ループの p は既に 2 番目の要素を指しています。だから私は3番目の要素を指す必要があると信じています。
コードを実行すると、入力が 2 番目の要素を削除する場合はうまく機能しますが、私の理解では、3 番目の要素を削除する必要があります。なんで?(i=2)
while()
(j<i-1 => 0<2-1)
q->next
i = 2