帮忙用C语言写单链表的插入与删除程序`该怎么解决

帮忙用C语言写单链表的插入与删除程序``
下面是单链表插入与删除算法,因为是初学,请各位高手帮忙,写出完整的程序,谢谢拉  
Void   ListInsert(Lnode   &L,int   i   ,ElemType   e){  
p=L;j=0;  
while(p&&j   <i-1){p=p-   > next;++j}//寻找第i-1个结点  
if(!p   &brvbar;   &brvbar;j   > i-1)return   ERROR;//i小于1或者大于表长+1  
s=(Linklist)malloc(sizeof(LNode));生成新结点  
s-   > data=e;s-   > next=p-   > next;//插入L中  
p-   > next=s;  
return   OK;  
}  


Void   ListDelete(Lnode&L,int   i,Elemtype&e){//寻找第i个结点,并令p指向其前趋  
p=L;j=0;  
while(p-   > next&&j   <i-1){  
p=p-   > next;++j;  
}  
If(!(p-   > next)   &brvbar;   &brvbar;j   > i-1)return   ERROR;//删除位置不合理  
q=p-   > next;p-   > next=q-   > next;//删除并释放结点  
e=q-   > data;free(q);  
return   Ok;  
}  


------解决方案--------------------
#define OK 1
#define ERROR -1
typedef int ElemType;

struct Linklist
{
ElemType data;
Linklist *next;
};

int ListInsert(Linklist *L, int i ,ElemType e)
{
Linklist *p,*s;
p=L;
int j=0;
while(p&&j <i-1)
{p=p-> next;++j;}//寻找第i-1个结点
if(!p || j > i-1)
return ERROR;//i小于1或者大于表长+1
s=(Linklist *)malloc(sizeof(Linklist));//生成新结点
s-> data=e;
s-> next=p-> next;//插入L中
p-> next=s;
return OK;
}


int ListDelete(Linklist *L,int i, ElemType &e)//寻找第i个结点,并令p指向其前趋
{
Linklist *p,*q;
p=L;
int j=0;
while(p-> next&&j <i-1)
{
p=p-> next;++j;
}
if(!(p-> next)|| j > i-1)return ERROR;//删除位置不合理
q=p-> next;p-> next=q-> next;//删除并释放结点
e=q-> data;free(q);
return OK;
}

我很少用C了,都是用C++,你看看行不行,如果还有问题什么的话再说
有错把错误信息发上来