在函数appendnode当中p的值没有成功赋值给head请问是为什么,以及该如何解决
#include<stdio.h>
#include<stdlib.h>//需要使用malloc函数
typedef struct link{
int data;
struct link *next;
}link;//定义一个名为link的链表
link *AppendNode(link* head);//传入头指针,传出头指针
void DisplayNode(link*head);
void DeleteMemory(link*head);
int main()
{
int i=0;
char c;
link*head=NULL;//定义指针先给他初始化为null
printf("do you want to append a new node(y/n)");
scanf(" %c",&c);
while (c=='y'||c=='Y')
{
head=AppendNode(head);
DisplayNode(head);
printf("do you want to append a new node(y/n)");
scanf(" %c",&c);
i++;
}
printf("%d nodes have been appended");
DeleteMemory(head);//申请了内存在使用完之后一定要free掉
return 0;
}
link *AppendNode(link* head)
{
link*p=NULL;
link*pr=head;
int data;
p=(link*)malloc(sizeof(link));
if(p==NULL)
{
printf("no enough memory to allocate\n");
exit(0);
} //如果没有分配到内存则结束程序
if(head==NULL)
{
head=p;
} //如果后面没有节点则将此节点设置为头节点
else
{
while(pr->next!=NULL)
{
pr=pr->next;//移动指针使其达到最后一个节点的指针域
}
pr->next=p;//pr已经移动到末尾的节点,此行让指针指向新分配的节点
}
printf("input node data:");
scanf("%d",&data);
p->data=data;
p->next=NULL;//将新节点设置为末尾的节点
return head;//返回头节点,之后所有的函数都会用到头节点
}
void DisplayNode(link*head)
{
link*p=head;
int j=1;
while(p!=NULL)
{
printf("%5d%10\n",j,p->data);
p=p->next;
j++;
}
}
void DeleteMemory(link*head)
{
link*p=head;
link*pr=NULL;
while(p!=NULL)//注意NULL的打法
{
pr=p;
p=p->next;
free(pr);
}
}
整个输入输出截图过来看看