私は構造を持っています:
struct Node {
int value;
struct Node *next;
};
typedef struct Node List;
そして、リストにアイテムを追加することを実装しましたが、特定のリストの最初の要素である私の関数である場合、リストから要素を削除することに問題があります:
void removeItem(List *ptr, int i)
{
List *current = ptr;
List *prev = NULL;
while (current != NULL)
{
if (current->value == i)
{
//it's first element
if (prev == NULL)
{
List *replace = ptr->next;
free(current);
ptr = replace;
current = replace;
}
else
{
prev->next = current->next;
free(current);
current = prev->next;
}
}
else
{
prev = current;
current = current->next;
}
}
}
私のリストが次のような場合:
1、2、3、4、5
removeItem(list, 1)を使用した後は次のようになります。
0、2、3、4、5
0があってはなりません。
もう 1 つの質問は、typedef が異なる場合にこれらの関数も実装する必要があるということです。
typedef struct Node *List;
しかし、その後、「間違った引数の型」/「構造体または共用体ではないメンバー「値」の要求」エラーが大量に発生します。これをどのように処理する必要があるかの例を見つけることができますか?