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;
}
第一,插入是insert而不是insect;int insert(Linklist L,char e,int k)
第二,程序內部有些小錯誤,你試試下面的代碼:int insect(Linklist L,char e,int k){Node *r;Linklist pre = L; //make pre and L the same int i=0; //輸入e插入的字母,k所在的位數,說明pre指向頭節點// pre=(Linklist)malloc(sizeof(Node));// pre->data=L->data;//pre的數據域就是L的數據域。怎麼錯了? while((pre != NULL) && (i < k - 1)) //Note that pre!=null is okay { pre=pre->next; i++; //change k to i } //尋找插入的前驅結點pre if(i != k-1)// 由於 pre->next!=NULL退出 (鏈表不夠長) return 0;r=(Linklist)malloc(sizeof(Node));r->data=e;r->next=pre->next;pre->next=r;//插入新的節點 return 1; }