ft_lstmap - chanhl22/libft GitHub Wiki
1 /* ************************************************************************** */
2 /* */
3 /* ::: :::::::: */
4 /* ft_lstmap.c :+: :+: :+: */
5 /* +:+ +:+ +:+ */
6 /* By: chanhlee <[email protected].> +#+ +:+ +#+ */
7 /* +#+#+#+#+#+ +#+ */
8 /* Created: 2021/01/29 15:54:44 by chanhlee #+# #+# */
9 /* Updated: 2021/01/31 10:30:32 by chanhlee ### ########.fr */
10 /* */
11 /* ************************************************************************** */
12
13 #include "libft.h"
14
15 t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
16 {
17 t_list *new_list;
18 t_list *curr;
19 t_list *temp;
20
21 if (!lst || !f)
22 return (NULL);
23 if (!(new_list = ft_lstnew(f(lst->content)))) // 1. lst๋ก ๋ฐ์ ๋งํฌ๋๋ฆฌ์คํธ ๊ฐ
content์ fํจ์๋ฅผ ์ ์ฉํ ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ! -> ์ฌ๊ธฐ์ ํ ๋น ์คํจํ๋ฉด NULL ๋ฐํ
24 return (NULL);
25 curr = new_list; //1. ์๋ก ๋ง๋ค์ด์ง ๋ฆฌ์คํธ๋ฅผ curr ๋ณ์์ ๋ด์๋ธ๋ค.
์? f๋ฅผ ์ ์ฉํ ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์ฃผ์์ ๊ฐ์ ์์์ผ ํ๊ธฐ ๋๋ฌธ -> ์ค์ ์๋ก์ด๋ฆฌ์คํธ์ ๊ฐ์ด
next์ ๊ฐ์ผ๋ก ๋ฐ๋๋ฉด ์๋๋ค. (new_list์ ์ค์ ๊ฐ์ด ๋ฐํ์ด ๋์ด์ผํ๋๋ฐ ์ด๊ฑฐ๋ฅผ ๊ฑด๋ค๋ฉด
์ด์ํ ๊ฐ์ด ๋ค์ด๊ฐ)
26 lst = lst->next; //1. lst = lst->next๋ฅผ ์จ์ผํ๋๋ฐ
์ ?lst = lst->next ๋ฅผ ์์ผ๋ฌธ ์์์, ์์ผ๋ฌธ ์์์ ๋ ๋ฒ ์ด ์ด์
->lst->next๊ฐ NULL์ด์์ ๊ฒฝ์ฐ ์์ผ๋ฌธ ์ง์
๋ชปํ๊ฒ ํ๊ธฐ ์ํด์.
NULL ์ธ๋ฐ ์์ผ๋ฌธ ์ง์
ํ์ ๊ฒฝ์ฐ -> return NULL;
NULL ์ด์ฌ์ ์์ผ๋ฌธ ์ง์
์ ํ์ ๊ฒฝ์ฐ -> return (new_head) (ํค๋๋ง ์๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ)
ํค๋๋ง ์์ ๋ ๋ฐํ๊ฐ์ด ๋ฌ๋ผ์ง๋ค!!!!
27 while (lst)
28 {
29 if (!(temp = ft_lstnew(f(lst->content)))) //1. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ ๋ฆฌ์คํธ์์ next
๊ฐ์ ๋ f๋ก ๋ฐ๊ฟ์ ์ด๋ค ๋ณ์(temp)์ ๋ฃ์ด์ค๋ค. (์๋ก ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์ค์ curr->next์
ํฉ์น๊ธฐ ์ํจ)
30 {
31 ft_lstclear(&newlst, del); //๋ฌธ์ ๊ฐ ์๊ฒผ์๋ ์ญ์
32 return (NULL);
33 }
34 curr->next = temp; // ๊ทธ๋ฆฌ๊ณ ์๋ก๋ง๋ temp๋ฅผ curr์ ์ฐ๊ฒฐํด์ค๋ค.
35 curr = temp; //์ฐ๊ฒฐํด์ฃผ๊ณ curr์ ์ฃผ์๊ฐ์ ๋ฐ๊ฟ์ค๋ค. ๋ค์ ๋
ธ๋์์ ์ฐ๊ฒฐ๋๊ฒ
ํ๊ธฐ ์ํจ
36 lst = lst->next; //๊ทธ๋ฆฌ๊ณ ๋ ๊ฐ์ ธ์ค๋ lst์์ lst->next๋ก ๋ค์ ๋
ธ๋์ ์ฃผ์๋ฅผ
์ ์ฅํ๋ค. (๋ค์ ๋
ธ๋์ f๋ฅผ ์ ์ฉํ๊ธฐ ์ํจ)
37 }
38 return (new_list);
39 }