C语言实现链表删除能被三整除的元素,输入两位数以上数据时不成功.

我想实现链表自动删除特定类元素,比如能被三整除的数.
但运行时输入很奇怪,似乎不能输入两位数即以上的数,我不明白是哪里出了问题.

img

#include
#include
using namespace std;
#include 

typedef int Status;

typedef char Elemtype;

typedef struct LNode {//定义链表
    Elemtype Data;
    //Elemtype* next;
    struct LNode *next;
}LNode,*LinkList;

int Inilist(LinkList &L){//初始化链表//int 型 
    L = new LNode;
    L->next = NULL;
    return OK; 
}

void Create_List(LinkList &L,Elemtype n){
    L = new LNode;
    L -> next = NULL;
    LNode *R = L;
    for(int i = 1; i <= n; i++){
        LNode *S; 
        S = new LNode;
        cin >> S->Data;
        S->next = NULL;
        R->next = S; 
        R = S;
    }
}

void Delete(LinkList &L){ 
    LNode *p = L->next;
    LNode *Target = L; 
    while(p){
        if(p->Data % 3 == 0){
            Target ->next = p->next;//假设第一个就能被三整除 
            free(p);//释放目标数据 
            p = Target ->next;
        }
        else{
             Target  = p;//不被三整除,就往后挪一个位置继续找 
             p = p->next;//为下一次循环做准备 
        }
    }
}

void PrintList(LinkList &L){
    LNode *P;
    P = new LNode;
    P = L -> next; 
    while(P){
        cout << P->Data << " ";
        P = P->next;
    } 
    cout << endl; 
}
 
int main() {
    int n = 0;
    LinkList LA;
    Inilist(LA);
    cin >> n; 
    Create_List(LA, n);
    PrintList(LA);
    Delete(LA);
    PrintList(LA);
    return 0;
}

因为
typedef char Elemtype;
所以链表每个节点只能装下单个字符