#include
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
typedef LNode *LinkList;
void CreateList(LinkList *L,int n) /*函数应该这样才行,解释见下*/
{
int i;
LinkList p;
*L=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
printf("Please input:");
scanf("%d",&p->data);
p->next=(*L)->next;
(*L)->next=p;
}
}
void DelMinNode(LinkList head)
{
LinkList p=head->next,pre=head;
LinkList minp,minpre;
int min=p->data;
minp=p;
minpre=pre;
while(p!=NULL)
{
if(p->data
min=p->data;
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next;
free(minp);
}
void PrintList(LinkList L)
{
LinkList p=L->next;
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
}
main()
{
LinkList La;
int num;
printf("Please enter the number:");
scanf("%d",&num); /*这里的\n去掉*/
getch(); /*刚开始你的scanf里多了个\n没看见所以加了这句调试了下*/
CreateList(&La,num); /*调用时函数要匹配,故加&*/
DelMinNode(La);
PrintList(La);
}
creat函数里的L是局部变量,你malloc后,它重新指向新的地址,故让它变成二级指针。
这样你就可以对La(main里的)操作了。
另外,你的程序还有个重大BUG,会产生内存泄漏,你malloc的内容没有全部free,故还需要在main结束最后,将La全部free.这里我没有帮你写,还有什么问题,可以继续
#include
#include
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList &L,int n) //创建一个链表,逆序输入数据
{
int i;
LinkList p,r;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(i=0;i
p=(LNode*)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=r->next;
r->next=p;
r=p;
}
}
void DelMinNode(LinkList head) //删除其中最小的一个数据
{
LinkList p=head->next,pre=head;
LinkList minp,minpre;
int min=p->data;
minp=p;
minpre=pre;
while(p!=NULL)
{
if(p->data
min=p->data;
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next;
free(minp);
}
void PrintList(LinkList L) //输出所有数据
{
LinkList p=L->next;
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
}
main()
{
LinkList La;
int num;
printf("Please enter the number:");
scanf("%d\n",&num);
CreateList(La,num);
//PrintList(La);
DelMinNode(La);
PrintList(La);
system("pause");
return 0;
}
void CreateList(LinkList &L,int n) //创建一个链表,逆序输入数据
这个调用函数应该加地址符号&,还有在这个函数里面应该再建立一个结点r
#include
#include
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
typedef LNode *LinkList;
void CreateList(LinkList L,int n)
{
int i;
LinkList p;
//L=(LinkList)malloc(sizeof(LNode)); // 调用前已分配内存
L->next=NULL;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
printf("Please input:");
scanf("%d",&p->data);
p->next=L->next; // 头插法
L->next=p;
}
}
void DelMinNode(LinkList head)
{
LinkList p=head->next,pre=head;
LinkList minp,minpre;
int min=p->data;
minp=p;
minpre=pre;
while(p!=NULL)
{
if(p->data
min=p->data;
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next;
free(minp);
}
void PrintList(LinkList L)
{
LinkList p=L->next;
while(p!=NULL)
{
printf("%4d",p->data);
p=p->next;
}
}
int main()
{
LinkList La;
int num;
printf("Please enter the number:");
scanf("%d",&num);
La=(LinkList)malloc(sizeof(LinkList));
CreateList(La,num); //La使用前要先初始化
DelMinNode(La);
PrintList(La);
return 0;
}