#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct e {
char *name;
int nbr;
}t_elem;
typedef struct node {
t_elem data;
struct node *prev;
struct node *next;
}t_node;
//Une fonction pour remplir la liste, mais pas d'interret pour toi
void add_elem(t_node **list, char *name) {
t_elem e;
t_node *elem;
t_node *ptr_debut;
ptr_debut = *list;
e.name = name;
elem
= malloc(sizeof(t_node
)); elem->data = e;
if (*list == NULL) {
*list = elem;
elem->next = NULL;
elem->prev = NULL;
} else {
while ((*list)->next != NULL) {
*list = (*list)->next;
}
(*list)->next = elem;
elem->prev = *list;
elem->next = NULL;
*list = ptr_debut;
}
}
//La fonction pour tester si tout a bien marché
void afficher_list(t_node *l) {
while (l != NULL) {
l = l->next;
}
}
int nb_elem_a_copier(t_node *l) {
int i = 0;
while (l != NULL) {
++i;
l = l->next;
}
return i;
}
//La fonction interessante
void copy_part(t_node *list, t_elem source) {
t_node *ptr_debut = list;
//on parcours notre liste
while (list != NULL) {
//Si l'element match
if (strcmp(list
->data.
name, source.
name) == 0) {
//On doit forement enregistrer le nombre d'element
//car plus on va en ajouter, plus la liste va s'agrandir
int nb = nb_elem_a_copier(list);
while (nb != 0) {
add_elem(&ptr_debut, list->data.name);
list = list->next;
nb--;
}
return;
}
list = list->next;
}
}
int main(void) {
t_node *list = NULL;
add_elem(&list, "a");
add_elem(&list, "z");
add_elem(&list, "e");
add_elem(&list, "r");
add_elem(&list, "t");
add_elem(&list, "y");
afficher_list(list);
t_elem e;
e.name = "t";
copy_part(list, e);
afficher_list(list);
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QgZSB7CgljaGFyICpuYW1lOwoJaW50IG5icjsKfXRfZWxlbTsKCnR5cGVkZWYgc3RydWN0IG5vZGUgewoJdF9lbGVtIGRhdGE7CglzdHJ1Y3Qgbm9kZSAqcHJldjsKCXN0cnVjdCBub2RlICpuZXh0Owp9dF9ub2RlOwoKCi8vVW5lIGZvbmN0aW9uIHBvdXIgcmVtcGxpciBsYSBsaXN0ZSwgbWFpcyBwYXMgZCdpbnRlcnJldCBwb3VyIHRvaQp2b2lkIGFkZF9lbGVtKHRfbm9kZSAqKmxpc3QsIGNoYXIgKm5hbWUpIHsKCXRfZWxlbSBlOwoJdF9ub2RlICplbGVtOwoJdF9ub2RlICpwdHJfZGVidXQ7CgoJcHRyX2RlYnV0ID0gKmxpc3Q7CgllLm5hbWUgPSBuYW1lOwoJZWxlbSA9IG1hbGxvYyhzaXplb2YodF9ub2RlKSk7CgllbGVtLT5kYXRhID0gZTsKCWlmICgqbGlzdCA9PSBOVUxMKSB7CgkJKmxpc3QgPSBlbGVtOwoJCWVsZW0tPm5leHQgPSBOVUxMOwoJCWVsZW0tPnByZXYgPSBOVUxMOwoJfSBlbHNlIHsKCQl3aGlsZSAoKCpsaXN0KS0+bmV4dCAhPSBOVUxMKSB7CgkJCSpsaXN0ID0gKCpsaXN0KS0+bmV4dDsKCQl9CgkJKCpsaXN0KS0+bmV4dCA9IGVsZW07CgkJZWxlbS0+cHJldiA9ICpsaXN0OwoJCWVsZW0tPm5leHQgPSBOVUxMOwoJCSpsaXN0ID0gcHRyX2RlYnV0OwoJfQp9CgovL0xhIGZvbmN0aW9uIHBvdXIgdGVzdGVyIHNpIHRvdXQgYSBiaWVuIG1hcmNow6kKdm9pZCBhZmZpY2hlcl9saXN0KHRfbm9kZSAqbCkgewoJd2hpbGUgKGwgIT0gTlVMTCkgewoJCXByaW50ZigiJXMiLCBsLT5kYXRhLm5hbWUpOwoJCWwgPSBsLT5uZXh0OwoJfQp9CgoKCmludCBuYl9lbGVtX2FfY29waWVyKHRfbm9kZSAqbCkgewoJaW50ICBpID0gMDsKCXdoaWxlIChsICE9IE5VTEwpIHsKCQkrK2k7CgkJbCA9IGwtPm5leHQ7Cgl9CglyZXR1cm4gaTsKfQoKCi8vTGEgZm9uY3Rpb24gaW50ZXJlc3NhbnRlCnZvaWQgY29weV9wYXJ0KHRfbm9kZSAqbGlzdCwgdF9lbGVtIHNvdXJjZSkgewoJdF9ub2RlICpwdHJfZGVidXQgPSBsaXN0OwoKCS8vb24gcGFyY291cnMgbm90cmUgbGlzdGUKCXdoaWxlIChsaXN0ICE9IE5VTEwpIHsKCgkJLy9TaSBsJ2VsZW1lbnQgbWF0Y2gKCQlpZiAoc3RyY21wKGxpc3QtPmRhdGEubmFtZSwgc291cmNlLm5hbWUpID09IDApIHsKCgoJCQkvL09uIGRvaXQgZm9yZW1lbnQgZW5yZWdpc3RyZXIgbGUgbm9tYnJlIGQnZWxlbWVudAoJCQkvL2NhciBwbHVzIG9uIHZhIGVuIGFqb3V0ZXIsIHBsdXMgbGEgbGlzdGUgdmEgcydhZ3JhbmRpcgoJCQlpbnQgbmIgPSBuYl9lbGVtX2FfY29waWVyKGxpc3QpOwoJCQl3aGlsZSAobmIgIT0gMCkgewoJCQkJYWRkX2VsZW0oJnB0cl9kZWJ1dCwgbGlzdC0+ZGF0YS5uYW1lKTsKCQkJCWxpc3QgPSBsaXN0LT5uZXh0OwoJCQkJbmItLTsKCQkJfQoJCQlyZXR1cm47CgkJfQoJCWxpc3QgPSBsaXN0LT5uZXh0OwoJfQoKfQoKaW50IG1haW4odm9pZCkgewoKCXRfbm9kZSAqbGlzdCA9IE5VTEw7CgoJYWRkX2VsZW0oJmxpc3QsICJhIik7CglhZGRfZWxlbSgmbGlzdCwgInoiKTsKCWFkZF9lbGVtKCZsaXN0LCAiZSIpOwoJYWRkX2VsZW0oJmxpc3QsICJyIik7CglhZGRfZWxlbSgmbGlzdCwgInQiKTsKCWFkZF9lbGVtKCZsaXN0LCAieSIpOwoKCWFmZmljaGVyX2xpc3QobGlzdCk7CgoJdF9lbGVtIGU7CgoJZS5uYW1lID0gInQiOwoKCWNvcHlfcGFydChsaXN0LCBlKTsKCglwcmludGYoIlxuIik7CgoJYWZmaWNoZXJfbGlzdChsaXN0KTsKCglwcmludGYoIlxuIik7CgoJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKfQ==