关于#链表重复插入会改变结点内容#的问题,如何解决?

第一次插入没问题,但是第二次插入会改变链表内容

int Location(PLinkList L,DataType x) //按名称查找
{
PLinkList p;

p=Init();
for(p=L->next; p&&strcmp(p->data->name,x->name); p=p->next);

if(p)    return 1;
else    return 0;

}

int Insert(PLinkList L,DataType x) //上架
{
PLinkList p;

if(!L)
{
    printf("表不存在!");
    return (-1);
}

if(!Location(L,x))
{
    p=Init();
    p->data=x;
    p->next=L->next;
    L->next=p;
    return 1;
}

else
{
    printf("该商品已存在!\n");
    return 0;
}

}

printf("请输入待上架商品名称\n");
            scanf("%s",tem.name);
            printf("请输入待上架商品数量\n");
            scanf("%d",&tem.number);
            printf("请输入待上架商品价格\n");
            scanf("%f",&tem.price);

            Insert(G,&tem);
我想在不改变参数的情况下从地址传递改为值传递