+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_sorted_list_insert.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2023/06/28 15:53:26 by ljiriste #+# #+# */
+/* Updated: 2023/06/28 17:51:43 by ljiriste ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <stdlib.h>
+#include "ft_list.h"
+
+t_list *ft_create_elem(void *data)
+{
+ t_list *new_elem;
+
+ new_elem = malloc(sizeof(t_list));
+ if (new_elem)
+ {
+ new_elem->data = data;
+ new_elem->next = NULL;
+ }
+ return (new_elem);
+}
+
+void insert_after(t_list *prev, void *data)
+{
+ t_list *new;
+
+ new = ft_create_elem(data);
+ if (!new)
+ return ;
+ new->next = prev->next;
+ prev->next = new->next;
+ return ;
+}
+
+void ft_list_push_front(t_list **begin_list, void *data)
+{
+ t_list *new_elem;
+
+ new_elem = ft_create_elem(data);
+ new_elem->next = *begin_list;
+ *begin_list = new_elem;
+ return ;
+}
+
+void ft_sorted_list_insert(t_list **begin_list, void *data, int (*cmp)())
+{
+ t_list *prev;
+ t_list *cur;
+
+ if (!*begin_list)
+ {
+ *begin_list = ft_create_elem(data);
+ return ;
+ }
+ prev = NULL;
+ cur = *begin_list;
+ while (cur)
+ {
+ if (cmp(data, cur->data) <= 0)
+ break ;
+ prev = cur;
+ cur = cur->next;
+ }
+ if (prev)
+ insert_after(prev, data);
+ else
+ ft_list_push_front(begin_list, data);
+ return ;
+}