关于数据结构练习题而我不会那档事

给定一个带头结点的单链表,设L为头指针,结点的结构定义如下,试写一算法删除该链表中第i个结点。
{//单链表结点的结构
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LinkList;
//删除单链表中第i个结点。
bool ListInsert(LinkList *&L,int i,ElemType &e)
{
//请在此处编写代码完成函数功能。
}

bool ListInsert(LinkList *&L,int i,ElemType &e)
{
    if(i<0)
        return false;
    LinkList  *p = L;
    while(p->next != NULL)
    {
        i--;
        if(i==0)
        {
            q = p->next->data;
            LinkList *q = p->next;
            p->next = p->next->next;
            free(q);
            return true;
        }
        p = p->next;
    }
    return false;
}