主题:为什么要多加个linklist类型的P?子函数的位置如何排?
示范程序如下:
#include"stdlib.h"
#include"stdio.h"
typedef struct LNode
{int data;
struct LNode *next;
}LNode,*linklist;
/*打印链表*/
void printflist(LNode *L) //如将初始化链表排在先,程序报错,为什么?
{linklist p=L;
printf("现在的链表为:");
while(p->next)
{p=p->next;
printf("%d ",p->data);}
printf("\n");}
/*初始化链表*/
void initlist(LNode *L) //疑问在这:为什么要多加个linklist p?是不是每次运行之后指针L变了,用P重新从头开始?
{ linklist p=L,s;
s=malloc(sizeof(LNode));
printf("请输入元素的值,并以0结束:");
scanf("%d",&s->data);
s->next=NULL;
while(s->data!=0)
{ p->next=s;
p=p->next;
s=malloc(sizeof(LNode));
scanf("%d",&s->data);
s->next=NULL;}
printflist(L);}
/*主函数*/
main()
{
linklist L;
L=malloc(sizeof(LNode));
L->next=NULL;
initlist(L);
system("pause");
}
修改后程序如下:
#include"stdlib.h"
#include"stdio.h"
typedef struct LNode
{int data;
struct LNode *next;
}LNode,*linklist;
/*打印链表*/
void printflist(LNode *L)
{
printf("现在的链表为:");
while(L->next)
{L=L->next;
printf("%d ",L->data);}
printf("\n");}
/*初始化链表*/
void initlist(LNode *L)
{
linklist s;
s=malloc(sizeof(LNode));
printf("请输入元素的值,并以0结束:");
scanf("%d",&s->data);
s->next=NULL;
while(s->data!=0)
{ L->next=s;
L=L->next;
s=malloc(sizeof(LNode));
scanf("%d",&s->data);
s->next=NULL;}
printflist(L);}
/*主函数*/
main()
{
linklist L;
L=malloc(sizeof(LNode));
L->next=NULL;
initlist(L);
system("pause");
}