我有以下結構:迭代列表LST和函數f施加到每一個環節,以建立一個「新鮮」的名單
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
答案取決於你f()以及事實上,如果你打算返回一個新的列表副本或修改一個現有的列表。 – dbrank0