include
include
typedef struct Node
{
char data;
struct Node *next;
}Node,*Linklist;//先定义、后使用
//定义数据L-分配头节点-插入数据,连接-返回
Linklist Createfromhead()
{
Linklist L;Node*s;int flag=1;char c;
L=(Linklist)malloc(sizeof(Node));
L->next=NULL;
while(flag)
{
c=getchar();
if(c!='$')
{
s=(Node*)malloc(sizeof(Node));
s->data=c;
s->next=L->next;
L->next=s;
}
else
flag=0;
}
do{
printf("%c ",L->data);
L=L->next ;
}while(L!=NULL); //打印插入后的链表(反序打印)
return L;
}
int insect(Linklist L,char e,int k)
{
Node *r;Linklist pre;int i=0;//输入e插入的字母,k所在的位数,说明pre指向头节点
pre=(Linklist)malloc(sizeof(Node));
pre->data=L->data;//pre的数据域就是L的数据域。怎么错了?
while((pre->next!=NULL)&&(i<k-1))
{pre=pre->next;k++;}//寻找插入的前驱结点pre
if(k!=i-1)// 由于 pre->next!=NULL退出 (链表不够长)
return 0;
r=(Linklist)malloc(sizeof(Node));
r->data=e;
r->next=pre->next;pre->next=r;//插入新的节点
return 1;
}
int main()
{
char e;int k;Linklist L;
Createfromhead();
printf("\ninput k e\n");
scanf("%d %c",&k,&e);
printf("\n%d,%c\n",k,e);//对k,e输入输出
if(insect(L,e,k)==0) printf("wrong");
else
{do{
printf("%c ",L->data);
L=L->next ;
}while(L!=NULL);//打印插入后的链表(反序打印)
}
getch();
return 0;
}