建立一个链表,同时声明一个函数,可是在main()函数中调用生命的函数后无法执行下一步操作
#include <stdio.h>#include <stdlib.h>
#define LEN sizeof(struct LNode)
int num;
int j;
struct LNode
{
int data;
struct LNode *next;
};
int n;
struct LNode *creat_lnode(int n)
{
struct LNode *L;
struct LNode *p;
struct LNode *r;
int j;
L=malloc(LEN); //L是个头节点
L->next=NULL;
r=L;
printf("请输入链表元素\n");
for(j=0;j<n;j++)
{
p=malloc(LEN);
scanf("%d",&(p->data));
p->next=NULL;
r->next=p;
r=p;
}
L=L->next;
return (L);
}
int flag=0;
void find_lnode(struct LNode *L,int i)
{
int m;
for(m=0;m<j;m++,L=L->next)
{
if(L->data==i)
{
printf("%d的位置是",i);
printf("%d\n",m);
flag=5;
}
}
if(flag==0)
printf("没有这个元素");
}
struct LNode *pre_insert_lnode(struct LNode *L,int i,int DATA)
{
struct LNode *pt_1;
struct LNode *pt_2;
struct LNode *pt_3;
int m;
pt_2=L;
pt_3=pt_2;
for(m=0;m<i-1;m++)
{
L=L->next;
}
pt_1=malloc(LEN);
pt_1->data=DATA;
pt_1->next=L->next;
L->next=pt_1;
for(m=0;m<100;m++,pt_2=pt_2->next)
{
printf("%d ",pt_2->data);
}
return pt_3;
}
void delete_lnode(struct LNode *P,int i)
{
struct LNode *pt_1;
struct LNode *pt_2;
struct LNode *first;
first=P;
int m;
for(m=0;m<i-1;m++)
{
P=P->next;
}
pt_1=P->next;
pt_2=pt_1->next;
P->next=pt_2;
free(pt_1);
for(m=0;m<100;m++,first++)
{
printf("%d\n",first->data);
}
}
int main()
{
struct LNode *L;
struct LNode *M;
struct LNode *h;
int i;
int insert_num;
int insert_data;
int del_area;
printf("请输入链表元素个数\n");
scanf("%d",&num);
L=creat_lnode(num);
M=L;
for(i=0;i<num;i++,L=L->next)
{
printf("%d\n",L->data);
}
printf("%d\n",M);
printf("请输入要查找的数据\n");
scanf("%d",&j);
find_lnode(M,j);
printf("请输入要插入的位置\n");
scanf("%d",&insert_num);
printf("请输入要插入的数据\n");
scanf("%d",&insert_data);
h=pre_insert_lnode(M,insert_num,insert_data);
/***********************************************************************/
就是在这,调用了pre_insert_lnode()函数向链表中插入一个数据后,就无法执行下一步的操作
/***********************************************************************/
printf("请输入要删除元素的位置\n");
scanf("%d",&del_area);
delete_lnode(M,del_area);
return 0;
}