关于单链表的实验,为什么我的程序运行结果达不到要求

#include
#include
struct Lnode{
int data;
struct Lnode *next;
};

struct Lnode *LinkList;

struct Lnode *SearchLinkList(struct Lnode *L , int i)
{
int j=1;
int e ;
struct Lnode *p;

p=L;

if(p!=NULL&&j<i)
{
    p=p->next;  
    j++;    
}

else if(!p||j>i)
{
    printf("数据出错"); 

    return (NULL);
}

else

e=p->data; 
printf("%d",e);

return (p);

}

int InsertLinkList(struct Lnode *L , int e , int i)
{
struct Lnode *p , *s;

p=SearchLinkList(L,i-1);     //细品一下 

if(!p)                   //细品一下 

return (-1);

else

s->next=p->next;
p->next=s;
s->data= e;

return 0;   

}

int DeleteLinkList(struct Lnode *L , int i)
{
int e ; struct Lnode *p , *s;

p=SearchLinkList(L , i-1);
s=SearchLinkList(L , i);

if(!p||!s)

return(-1);

else

e=s->data;
p->next=s->next;

free(s);

return (e);

}

struct Lnode *CreateLinkList(int *r , int n)
{
int j ; struct Lnode *L , *s ;

s = (struct Lnode*)malloc(8*sizeof(struct Lnode));

s->data = r[1];

s->next = NULL;

L = s;

for(j=2;j<=n;j++)
InsertLinkList(L , r[2] , j);

return (L); 

}

int ShowLinkList(struct Lnode *L)
{
int e ;
struct Lnode *p ;

if(!L)

return (-1);

else

p=L;

while(p->next)
{
    printf("%d",p->data);
    p=p->next;
}   

e=p->data; 
printf("%d",e);

return 0;

}

int main()
{
int r[100], i , SampleNum , SearchPos , NewPos , Newitem, DelPos ;
struct Lnode *p;

scanf("%d",&SampleNum);

for(i=1;i<=SampleNum;i++)
scanf("%d",r[i]);

LinkList=CreateLinkList(r , SampleNum);
ShowLinkList(LinkList);

scanf("%d",&SearchPos);
printf("%d",SearchLinkList(LinkList , SearchPos));

scanf("%d %d",&NewPos,&Newitem);
InsertLinkList(LinkList,Newitem,NewPos);
ShowLinkList(LinkList);

scanf("%d",&DelPos);
DeleteLinkList(LinkList , DelPos);
ShowLinkList(LinkList);

return 0;

}


https://zhidao.baidu.com/question/1181072080614635499.html