拜求:输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等操作。该怎么解决

拜求:输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等操作。
问:输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等操作。


------解决方案--------------------
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;


LinkList CreateLinkList()
{
LinkList head,r,s;
int x;
int flag=1;
head=(LinkList)malloc(sizeof(Node)); //建立单链表的头结点
head->next=NULL; //将单链表最后一个结点rear指针域置空
r=head;

printf("请从键盘任意输入数据建立单链表并以-1结束:\n");
while(flag)
{
scanf("%d",&x);
if(x!=-1)
{
s=(LinkList)malloc(sizeof(Node));
s->data=x;
r->next=s;
r=s;

}
else
{flag=0;
r->next=NULL;
printf("您建立的单链表如下:\n");
}
}
return head;
}
void printfList(LinkList head)
{
LinkList p;
p=head->next;
while(p)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}


void InsertList(LinkList head,int x,int i)
{
LinkList pre,s;
int j;
pre=head;
j=0;
while(pre!=NULL && j<i-1 )
{
pre=pre->next;
j++;
}
if((j!=i-1)||(pre==NULL))
{
printf("\n no posstion Error\n");return;}
s=(LinkList)malloc(sizeof(Node));
s->data=x;
s->next=pre->next;
pre->next=s;
printfList(head);

}


void DeleteList(LinkList head,int i)
{
LinkList pre,r;
int j;
pre=head;
j=0;
while(pre->next!=NULL && j<i-1)
{
pre=pre->next;
j++;
}
if((j!=i-1)||(pre->next==NULL) )
{
printf("\nPostion Error\n");return;}
r=pre->next;
pre->next=r->next;
free(r);
}

int lenList(LinkList rb)
{

LinkList p,head;
int n=0;

head=rb->next;
p=head;
while(p!=NULL)
{
n++;
p=p->next;
}
printf("线性表的长度=%d",n);
return 0;
}

void main()
{
LinkList head;
int x,j,i;
j=-1;
printf("********单链表的插入、删除************\n") ;
printf("\n");
printf("首先建立一个单链表\n");
head=CreateLinkList();
printfList(head);
printf("请选择您要进行的操作(1为插入,2为删除,3求线性表的长度,0为退出)\n");


while(1)
{
printf("\n请选择您要进行的操作:\n");
scanf("%d",&j);
getchar();//吸收回车
switch(j)
{
case 1:
{
printf("请输入要插入的元素的位置:\n");
scanf("%d",&i);
getchar();
printf("请输入要插入的数据:\n");
scanf("%d",&x);
getchar();
InsertList(head,x,i);
break;
}
case 2:
{
printf("请输入要删除的元素的位置:\n");
scanf("%d",&i);
getchar();
DeleteList(head,i);
printfList(head);
break;
}
case 3:
{
lenList(head);
break;
}
case 0:
exit(0);
break;
default:
{
printf("该操作不存在,请输入正确的操作!\n");