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 insert(Linklist L,char e,int k)
{
Node r;Linklist pre=L;int i=0;//输入e插入的字母,k所在的位数,说明pre指向头节点
//给链表+分配空间,不用给数据
pre=(Node)malloc(sizeof(Node));
while(i<k-1)//(pre->next!=NULL)&&情况不用
{pre=pre->next;i++;}//寻找插入的前驱结点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(insert(L,e,k)==0) printf("wrong");
else
{do{
printf("%c ",L->data);
L=L->next ;
}while(L!=NULL);//打印插入后的链表(反序打印)
}
getch();
return 0;
}
int insert(Linklist L,char e,int k)
{
Node r; //应该是Node *r; 或者Linklist r;
pre=(Node)malloc(sizeof(Node));//这也不对,应该: pre=(Linklist)malloc(sizeof(Node));
r=(Linklist)malloc(sizeof(Node));