0

ノードを適切に削除して再編成する方法がわかりません。誰かが私が間違っていたことと、それを修正する方法を説明できますか?

他の投稿を読んでみましたが、私のものと比較して見つけることができません。

printf("Enter index number of person to be deleted=\n");
scanf("%d", &index_del);
t = head;
while(t->index != index_del)
{
  t = t->next;
}
t1 = t->next;
t->next = t1->next;  ////////////////////breaks here somewhere
free(t1);
break;
4

2 に答える 2

1
struct node *tmp, **pp;
int index_del;

scanf("%d", &index_del);

for (pp = &head; *pp; )
        if ((*pp)->index != index_del) {pp = &(*pp)->next; continue; }
        tmp = *pp;
        *pp = tmp->next;
        free(tmp);
        }
  • これにより、ノードがリストの先頭にある場合でもノードが削除されます
  • index_delまた、存在する必要がある場合は、値を持つ複数のノードも削除します

ここに秘訣があります。変更する必要があるのは、削除するノードを指すポインターだけです。これはhead、リスト外のポインターまたはリスト->next内のポインターのいずれかです。

于 2013-05-15T16:23:50.873 に答える
0

次の 2 つのケースを区別する必要があります。

index_del が 0 の場合、head を head->next に設定する必要があります。そうでない場合は、のアイテムの次のメンバーを設定する必要があります。

printf("Enter index number of person to be deleted=\n");
scanf("%d", &index_del);
if (index_del == 0)
{
  t = head->next;
  free(head);
  head = t;
}
else
{
t = head;
while(t->index != index_del)
{
  p = t;
  t = t->next;
}
// t is the item to delete, p is the item before t
p->next = t->next;
free(t);
break;
于 2013-05-15T16:05:38.720 に答える