修改如下:
//---------------------------------------------------------------------------
#include "stdio.h"
#include "stdlib.h"
typedef char DataType;
typedef struct node{
DataType data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
ListNode *p;
LinkList head;
LinkList GreatListRH(void)
{
DataType ch;
LinkList head;
ListNode *s,*r;
head=(ListNode *)malloc(sizeof(ListNode));
r=head;
printf("输入链表各结点的数据:\n");
while((ch=getchar())!='\n')
{
s=(ListNode *)malloc(sizeof(ListNode));
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;
return head;
}
ListNode *LocateNode (LinkList head,DataType key)
{
ListNode *p=head->next;
while(p&&p->data!=key)
p=p->next;
return p;
}
void InsertList(LinkList head,DataType x,int i)
{
ListNode *p=head,*s;
int j;
for (j=0; j
}
if(p==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
s=(ListNode *)malloc(sizeof(ListNode));
s->data=x,
s->next=p->next;
p->next=s;
}
void DeleteList(LinkList head,int i)
{
ListNode *p=head,*r;
int j;
for (j=0; j
}
if(p==NULL||p->next==NULL)
{printf("未找到第%d个结点",i-1);exit(0);}
r=p->next;
p->next=r->next;
free(r);
}
void main()
{
ListNode *p,*s;
DataType key;
ListNode *q;
int i;
DataType x;
p=GreatListRH();
printf("输入链表各结点的数据:\n");
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");
printf("输入要查找的数据:");
scanf("%c",&key);
q=LocateNode(p,key);
if(q!=NULL)
printf("找到值为%c的结点:\n",key);
else
printf("没有找到值为%c的结点:\n",key);
printf("\n");
printf("输入要插入的数据和位置:");
fflush(stdin);
scanf("%c%d",&x,&i);
InsertList(p,x,i);
printf("在第%d个位置插入%c后链表各结点的数据:\n",i,x);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的插入
printf("输入要删除结点的位置:");
scanf("%d",&i);
DeleteList(p,i);
printf("在第%d个位置删除结点后链表各结点的数据:\n",i);
for(s=p->next;s!=NULL;s=s->next)
printf("%c",s->data);
printf("\n");//链表的删除
}
//---------------------------------------------------------------------------