を作成するために、各リンクに関数fを適用し、私は次の構造を持っている:反復し、リストLSTと「新鮮」リスト
typedef struct s_list
{
void *content;
void content_size;
struct s_list *next;
} t_list;
そして、私は関数を作成しようとしています:
t_list *lstmap(t_list *lst, t_list *(*f)(t_list *elem));
を
t_list「 LST
」、各要素に「 F
を」関数を適用する各要素を反復し、新しい返し
新鮮な要素を持つt_list
tmp = f(lst);
first = tmp;
while(lst)
{
tmp = f(lst);
tmp = tmp->next;
lst = lst->next;
}
動作しませんでした:まず
は、私は次のようなアプローチを試してみました。その後、次のように反復:
tmp = f(lst);
first = tmp;
while (lst->next)
{
tmp->next = f(lst->next);
tmp = tmp->next;
lst = lst->next;
}
それは働きました。
なぜ結果が異なるのですか?
新鮮なリストには新鮮なコンテンツを指す新しいノードが必要です。これらはある種の記憶を占有しなければならない。この記憶はどこから来たのですか? –
また、この関数の一般的な一般名は[map](https://en.wikipedia.org/wiki/Map_(higher-order_function))です。 – unwind
回答はあなたに依存します。リストの新しいコピーを返すか、既存のリストを修正する予定がある場合は、事実にもよります。 – dbrank0