删除单链表(带头结点,头插入法建立单链表)的第i个结点

【问题描述】删除单链表(带头结点,头插入法建立单链表)的第i个结点

【样例输入1】

                   5

                   6 7 8 9 10

                   3

【样例输出1】 10 9 7 6

【样例输入2】

                 1

                 8

                 1

【样例输出2】 null

【样例输入3】

                 1

                 8

                 2

【样例输出2】 error

【样例说明】第一行输入链表长度5,第二行依次输入链表元素,以空格间隔,第三行输入删除的元素序列3.

                 以空格间隔依次输出删除后的单链表元素,若为空表则输出null,若为无效删除,则输出error

我的代码在下面,运行不出来,该怎么改正?

#include
#include 
#define ERROR 0
#define OK 1
using namespace std;
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*linklist;
void Initlist(linklist &L)
{
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
}
void creatlist(linklist &L,int n)
{
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
    for(int i=0;imalloc(sizeof(LNode));
        cin>>p->data;
        p->next=L->next;
        L->next=p;
    }
}
int Listdelete(linklist &L,int i)
{
    LNode *p,*q;
    int j=0;
    while(p->next&&j-1)
    {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return ERROR;
    q=p->next;
    p->next=q->next;
    delete q;
    return OK;
}
void print(linklist &L)
{
    LNode *p;
    p=L->next;
    if(p)
    {    while(p)
        {
            cout<data ;
              p=p->next;
        }
    }
    else if(p==NULL)
        cout<<"null";
    else
        cout<<"error";
                
}
int main()
{
    int n,i;
    cin>>n;
    linklist L;
    Initlist(L);
    creatlist(L,n);
    cin>>i;
    Listdelete(L,i);
    print(L);
    return 0;
}

LNode *p,*q;
int j=0;
while(p->next&&j<i-1)
{
    p=p->next;
    ++j;
}

目测这里p是野指针,没有赋值就while了