1
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

4

2 に答える 2

0

i-1 のため、i = 1 になり、リストの 2 番目の要素を指します。HTH。

于 2013-03-29T20:44:17.310 に答える
0

ループ条件の 2 番目の部分は、削除の前にループがスキップする必要がある要素の数をコードに伝えます。2 番目の要素を削除する必要がある場合は、その前の要素を 1 つスキップする必要があります。一般に、要素番号 N を削除するには、N-1 個の要素をスキップする必要があります。

于 2013-03-29T20:46:51.440 に答える