Не получается продублировать элемент односвязного списка

Дано указатель Р1 на первый элемент не пустого списка. Продублировать в списке все элементы с четными значениями и нечетными номерами (Новые элементы добавлять перед существующими элементами с такими же значениями) Я сейчас написал немного кода где я хочу просто попробовать сделать дублирование одного элемента , но при компиляции консоль ничего не выводит . Вообще, я решил сделать просто дублирование после того как не получилось основное задание , хотел просто принцип роботы понять но и в том и в том случае консоль не выводит ничего

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
struct TNode {
    int data;
    struct TNode *next;
};
typedef struct TNode Node;
void CreateNode(Node** head, int d)
{
    Node *tmp = (Node*)malloc(sizeof(Node));
    tmp->data = d;
    tmp->next = (*head);
    (*head) = tmp;
}
void copy(Node** head)
{
    Node *tmp;
    Node *P1 = (Node*)malloc(sizeof(Node));
    tmp = (*head);
    while (tmp != NULL)
    {
        if ((tmp->next->data)%2==0)
        {
            P1->next = tmp->next;
            tmp->next = P1;
            P1->data = P1->next->data;
        }
        tmp = tmp->next;
    }
}
int main()
{
    setlocale(LC_ALL, "ukr");
    Node *head = NULL;
    for (int i = 0; i < 3; i++)
    {
        CreateNode(&head, i + 1);
    }
    copy(&head);
    while (head)
    {
        printf("%d\n", head->data);
        head = head->next;
    }
    getchar();
    return 1;
}

Ответы (0 шт):